maven项目 ant_将大型项目从Ant迁移到Maven

maven项目 ant

事实是我们处在艰难时期。 我们花了将近三个月的时间将构建机制从Ant迁移到Maven 。 如果您打算在大型项目中进行同样的安排,那是您必须安排的最短时间。 我们仍在努力解决这种迁移带来的一些附带影响,但幸运的是,它们并不是那么关键。

上下文

仅需要一点上下文,我们就有一个由25个集成应用程序组成的完整Java EE 6系统,每个应用程序平均具有3个模块(EJB,WEB等),达到约80个模块。 根据我们的Sonar分析,我们管理着接近500K行的Java代码(不包括JS,CSS,JSP和JSF文件)。 构建所有内容需要15到20分钟。 这取决于服务器的心情。

决定采用Maven是开始大规模重构应用程序的先决条件,尽管使用了最新技术(Java EE 6),但多年来,这些应用程序遭受了多种框架,设计缺陷和多种体系结构的困扰。 我们正在朝着建立在Java EE规范基础上的单一体系结构的方向发展,以优化依赖关系,从中长期角度降低开发成本并在Glassfish Application Server中无缝运行。

职责

由于Maven提供了灵活性,因此项目结构几乎与Ant相同。 我们在根文件夹中有一个超级pom.xml文件,该文件基本上声明了所有模块,插件,附加存储库和依赖项。 依赖关系在依赖关系管理中声明(使用标记<dependencyManagement>)。 这样,所有版本号都在一个地方声明。 除了超级pom.xml之外,我们还为每个集成应用程序提供一个文件夹,并且在每个文件夹中都有一个应用程序pom.xml和其他三个文件夹,每个Java EE模块(EAR,EJB,WEB)都有一个文件夹。 应用程序的pom.xml继承自超级pom,它基本上声明了组成应用程序的模块。 在模块文件夹中,我们还有一层pom文件。 这些pom文件继承自各自应用程序的pom文件,并描述其模块的特殊性。 总之,从系统整体到Java EE模块,我们共有三个pom文件级别。

结构示例类似于我们正在使用的结构。

出于开发目的,我们避免在本地部署整个应用程序。 这就是为什么我们在每个应用程序中都有一个EAR模块的原因。 这样,我们节省了仅部署正在处理的应用程序的时间。 打包以部署在服务器上时,不考虑那些应用程序EAR模块。 为了为服务器构建完整的EAR,我们有一个特殊的应用程序,其中包含EAR模块,该模块的pom文件将所有EJB和WEB模块声明为依赖项。 执行目标
这个pom.xml上的包实际上将创建超级EAR文件。

EAR模块将整个系统打包在一个部署文件中。

善良

在实施Maven之后评估项目,我们可以注意到以下好处:

Maven为简化构建背后的逻辑做出了贡献 :现在,每个人都知道发生了什么,因为pom.xml文件比build.xml文件更容易理解。 我们的Ant文件是由
Netbeans ,因此非常大且不可读。 实际上,我们很幸运能够让它们工作这么长时间,因为很难对其进行维护。 毫无疑问,我们很快就会发现无可挽回的混乱。

Maven还有助于在所有项目依赖项中进行排序 :我们从一个约100 MB的EAR软件包升级到了一个约50MB的软件包,减少了50%。 它有助于缩短部署时间。

我们有机会对项目进行了清理 :在收集依赖关系以编写pom.xml文件时,我们发现不再需要某些模块了。 通过模块传播的库也被删除,以支持Maven的依赖关系管理。 总而言之,我们一直说“ Maven是一场噩梦”,直到有一天一切都井井有条,我们变得更加快乐和放松。 那也是大多数人所说的,因为要为特定情况找到解决方案并不容易,而且每个人都有特定的情况要处理。

简短的学习曲线 :部署Maven之后,我们拜访了所有开发人员,重新配置了Netbeans以识别Maven项目,并向他们解释了从那时起如何进行。 他们所有人都可以立即继续他们的开发活动,并且只触发了一些支持请求。 这些电话都没有阻塞问题。 我不得不说,Netbeans为减少学习难度做出了很大贡献,因为所有必需的目标都是直接从IDE执行的,并且不需要转到命令行,这通常是在Eclipse中发生的。

坏人

不幸的是,我们遇到了一些挫折:

现在,使用Maven进行构建需要花费更长的时间 :由于这一点,我们注意到开发人员的生产力下降,最终使我们有些沮丧。 由于我们不会回滚到Ant,因此我们正在考虑JRebel对更改的代码进行动态重新加载,以补偿我们所花费的额外时间。

我们正在使用某些在Maven的中央存储库或其他地方找不到的库 :有些是商业库,有些则太旧了。 我们还发现存在不一致的库,在运行时会引发许多异常(即Apache FOP)。 对于这些情况中的每一种,我们都必须找到不太理想的解决方法,但我们不能这么长时间保持这种状态。 我们必须安装本地Nexus存储库以解决特殊情况。 这在我们的清单中。

发生意外行为 :尽最大的努力不足以避免应用程序中的意外行为。 我们建立了一个电子表格,列出了所有应用程序及其各自的模块。 记录所有库和模块之间的依赖关系; 描绘了项目结构; 深入细节。 为了详细说明该电子表格,我们花了几天的时间研究系统的内幕,吸收低级机制和设计决策。 所有收集的信息都用于迁移。 但是,依赖关系的重新排列以及重复项和未使用库的删除导致导航流中断,无处发出警报消息,URL路径更改以及许多其他意外事件。 不幸的是,我们无法预测这些问题,并且我们花费在修复上的时间比最初预计的要多得多。

结论

最后,我想为那些计划在中/大型项目中采用Maven的人士提供一些建议:

与最终用户交流迁移:与最终用户交流未来几天将发生的事情非常重要。 用户应注意,由于他们有责任改善自己的业务,因此我们也有义务改善自己的业务。 这意味着新功能的交付将暂时放慢速度,从而为更快发布更好的产品铺平道路。 如果他们不知道发生了什么,那么他们对问题的容忍度就会非常低,从而损害项目的声誉。

即使运行良好,也不要害怕更改 :我们已经问过自己:如果Ant运行良好,为什么要迁移到Maven。 实际上,我们的策略是降低复杂性以简化问题的解决。 因此,我们不害怕迁移,因为预防措施也非常重要。

将整个迁移置于版本控制下,以帮助调查问题 :一旦创建了所有pom文件并进行了版本控制,则应分别提交这些文件中的每个小更改,以便在出现意外问题时恢复更改。 它有助于找出原因。 很高兴知道Ant和Maven文件之间没有冲突。 因此,两者都可以在迁移期间留在同一个分支中,而对开发人员没有任何影响。

如果没有像Maven这样的构建系统,请不要进行大规模的重构 :成功的重构取决于对应用程序的详细了解,采用Maven会促使您进行广泛的研究。 除此之外,该项目将更加干净,组织得更好。

Maven还有其他替代方法,例如Apache Ivy和Gradle ,但是,尽管应受到批评,但由于其成熟度,我们仍然推荐在替换Ant时使用Maven。 丰富的插件产品组合; 网络上的大量文档; 和丰富的IDE支持。 但是,一旦Maven到位,最好评估其他替代方案。 最初的海啸过后,其他海浪将悄悄袭来。

参考: Hildeberto博客博客中的JCG合作伙伴 Hildeberto Mendonca 将大型项目从Ant迁移到Maven 。

翻译自: https://www.javacodegeeks.com/2012/12/migrating-a-large-project-from-ant-to-maven.html

maven项目 ant

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

缩影和掠影_普查员的“酸苦甜” 社区人口普查工作掠影

普查员的“酸苦甜”--社区人口普查工作掠影/十年一度的人口普查即将收官自十月中旬开展摸底工作以来长安路三社区的普查员们伴着晨曦出发&#xff0c;伴着星光回家&#xff0c;走街串巷、爬楼入户。他们中有社区干部、有社区工作者、还有热心的志愿者们&#xff0c;大家都绷着一…

八数码深度优先搜索_深度优先搜索和广度优先搜索

深度优先搜索和广度优先搜索关于搜索&遍历对于搜索来说&#xff0c;我们绝大多数情况下处理的都是叫 “所谓的暴力搜索” &#xff0c;或者是说比较简单朴素的搜索&#xff0c;也就是说你在搜索的时候没有任何所谓的智能的情况在里面考虑&#xff0c;很多情况下它做的一件事…

JArchitect v2017发布!

我们很高兴地通知您&#xff0c; JArchitect v2017已发布 &#xff0c;现在可以下载 &#xff01; JArchitect是一个分析工具&#xff0c;确实可以让您深入研究代码的结构和质量 。 使用JArchitect&#xff0c;可以使用 代码指标 &#xff0c;使用可视化 图和树图 &#…

[C语言]程序练习(一)

你好&#xff0c;这里是争做图书馆扫地僧的小白。 个人主页&#xff1a;争做图书馆扫地僧的小白_-CSDN博客 目标&#xff1a;希望通过学习技术&#xff0c;期待着改变世界。 目录 前言 一、常量练习 &#xff08;一&#xff09;整型常量 &#xff08;二&#xff09;浮点型常…

如何在程序中不用加号实现加法_程序员那些事 | JavaScript基础(六)

Hello&#xff0c;程序员那些事又与大家见面了&#xff01;JS简易日历先给大家看一下效果&#xff1a;大家可能会觉得&#xff0c;唉~好像跟上节课讲的选项卡差不多&#xff0c;就是十二个按钮&#xff0c;改变this的class&#xff0c;同时下面放十二个div&#xff0c;每次显示…

求立方根_「每日一学」数学七上:立方根的知识要点

哈喽&#xff0c;大家好&#xff01;我们又见面了&#xff0c;欢迎继续关注【轩爸辅导】的【口袋数学】。日更【每日一学】【每日一练】&#xff0c;帮助孩子日积月累&#xff0c;考出好的成绩。配套辅导&#xff0c;哪里不会学哪里&#xff0c;哪里出错练哪里&#xff0c;帮助…

mongodb适用于_适用于MongoDB和Mongometer的SpiderMonkey至V8

mongodb适用于通过10gen将MongoDB 2.3 / 2.4的默认JavaScript引擎从SpiderMonkey切换到V8&#xff0c;我想我将借此机会使用mongometer比较这些发行版的相对性能。 作为安全专家&#xff0c;我真的应该首先研究“ 其他身份验证功能” ……嘿。 我将记录比较过程中所采取的步骤…

地面指示标志_详解消防应急照明和疏散指示系统的施工及安装方法消防施工

详解消防应急照明和疏散指示系统的施工及安装方法消防施工消防应急照明与疏散指示系统在生活中随处可见&#xff0c;相信您并不陌生&#xff0c;它是为人员疏散、消防作业提供照明和疏散指示的系统&#xff0c;由各类消防应急灯具及相关装置组成。自今年3月1日国家标准GB 51309…

管理任务执行-有效执行

背景 给任务排优先级是解决做什么的问题。有效执行解决的是怎么做的问题。 项目执行的要点。 清晰的目标 现象 1.明确项目的初衷&#xff0c;但是没有设定可以衡量的目标。 2.在你的眼中目标很清晰&#xff0c;但是负责项目实施的员工并不知道从哪下手去执行&#xff1b; 3.两周…

什么是实验室人员比对人员_CNAS实验室认可对人员、设备的要求

一、人员要求1、从事实验室活动的人员不得在其他同类型实验室从事同类的实验室活动。 2、从事检测或校准活动的人员应具备相关专业大专以上学历。如果学历或专业不满足要求&#xff0c;应有 10 年以上相关检测或校准经历。关键技术人员&#xff0c;如进行检测或校准结果复核、检…

anaconda base环境_如何在最新版的Anaconda下安装Tensorflow 1.9

去年10月Tensorflow刚刚开放了2.0&#xff0c;当然用2.0慢慢地会变成未来使用Tensorflow的趋势。但是&#xff0c;关于如何用2.0进行机器学习和深度学习研究的书籍市面上能买到的大多都还是英文原版&#xff0c;且很少&#xff0c;因为太新中文的参考书更是少的可怜。因此&…

降级安装_如何升级iOS13测试版,还有降级

我是果子&#xff0c;前几天苹果发布了iOS13第二个开发者预览版&#xff0c;并且放出了描述文件&#xff0c;可以直接在手机上通过安装描述文件OTA升级。升级iOS13预览版不过我发现还有很多小伙伴不会通过安装描述文件进行升级&#xff0c;所以今天我们再写个教程给还不知道的小…

贪心只能过样例 loj515

范围$100$ 题解 比较裸的式子 $f[i][j]$表示枚举到第$i$位有没有和为$j$方案 只有$0$或$1$ $f[i][j]f[i-1][j-val*val]$ 答案$\sum\limits f[n][i]$ 范围$1000000$$((1-100)^2 *100)$ 复杂度爆炸,可以滚动数组,得17分 考虑优化,$bitset$, $bitset$表示实际值是否可以凑出 $f[i]…

接口中定义的成员变量是( )。_抽象与接口

原文链接&#xff1a;抽象与接口抽象类抽象类的定义Java可以创建一种类专门用来当作父类&#xff0c;这种类称为“抽象类”。抽象类的作用有点类似“模板”&#xff0c;其目的是要设计者依据它的格式来修改并创建新的类。在Java中可以创建一种类专门用来当做父类&#xff0c;这…

配置phoenix连接hbase_Phoenix视图映射

点击关注上方“知了小巷”&#xff0c;设为“置顶或星标”&#xff0c;第一时间送达干货。Phoenix定位为OLTP和操作型分析(operational analytics)&#xff0c;大多用于在线业务&#xff0c;稳定性要求第一位。Phoenix的功能很强大&#xff0c;也很灵活&#xff0c;Phoenix SQL…

python分析数据差异的方法_用Python的两种方法进行方差分析

在进行数据分析时&#xff0c;我们往往会遇到要对某个变量的影响因素进行分析的情况&#xff0c;而影响一事物的因素往往是很多的。比如在化工生产中&#xff0c;有温度、压力、剂量、反应时间等因素。每一因素的改变都有可能影响产品的数量和质量。我们往往要找出对产品质量有…

5 图片 渐变_AI教程!5分钟教你绘制超酷炫的字体效果

图一所示的图片就是我们今天要学的AI教程啦。为什么想起来要做这个呢&#xff1f;因为前两天有两个粉丝私信我问这种效果的字体怎么做。觉得大家应该对这类字体比较感兴趣的&#xff0c;所以今天就给大家出个教程啦。第一眼看上去是不是感觉很酷炫&#xff1f;其实步骤也不多&a…

6的变换_电源学报 | 2020年第3期:quot;高性能双向直流变换技术及其应用quot;专辑征稿启事...

往期精选&#xff1a;【电源学报•热点论文】贝尔福-蒙贝利亚技术大学(UTBM)高非教授-多物理域质子交换膜燃料电池建模仿真及实验测试专辑主编&#xff1a;张云 研究员(天津大学)吴红飞 教授(南京航空航天大学)专辑刊期&#xff1a; 2020年第3期(2020年5月)专辑介绍双向直流变换…

flash大作业一分钟源文件_「百树云课堂」一写作业就像被雷劈,是什么“病”?...

一写作业就闹心&#xff0c;大部分都是因为在培养习惯的时候基础没打好。比如&#xff1a;对时间不敏感、对效率不敏感、专注力低下等等&#xff01;今天咱就系统说下“习惯培养”的重点。1大部分娃写不完作业&#xff0c;最主要的一点就是对时间不敏感。写一个字&#xff0c;喝…

bzoj5147bzoj2121loj6701 字符串游戏

做不出来杂题,到处找题做 看到$loj$上新出了一道题,觉得很神仙不错, 还记得Censoring吗(一个AC自动机的题) 这个题求最优解,数据范围$150$ 题解 数据范围非常小,首先贪心肯定不行,考虑AC自动机上$dp$? 好吧其实是区间$dp$ 一个直接的想法是维护$f[l][r]0/1$表示是否可以清空$l…