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 IvyGradle ,但是,尽管应受到批评,但由于其成熟度,我们仍然推荐在替换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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Alpha / Beta /Stable 当为发布投票时,审阅者指定他们认为发布已达到的稳定性级别。一个新的主要版本的初始版本通常在几个月的时间内从Alpha过渡到Beta到Stable。但是,稳定级别仅在Java规范发布实现已完成时可用。这意味着在所有其他方面被认为稳定的版本,如果规格不是最终的,仍然可以标记为Beta。 下载页面将始终显示最新的稳定版本和任何新的Alpha或Beta版本(如果存在)。Alpha和Beta版本始终在下载页面上清楚地标记。 稳定性是一个主观判断,你应该总是仔细阅读版本注释任何版本,你打算使用。如果你是一个释放的早期采用者,我们很乐意听到你关于它的稳定性意见,表决部分:它发生在上开发邮件列表。 Alpha版本可能含有大量的规范和/或显著的bug需要未经测试/缺少的功能,并且预计不会稳定地任何时间运行。 Beta版本中可能含有一些未经测试的功能和/或一些相对较小的错误。Beta版本预计不会稳定运行。 Stable的版本可能包含少量相对较小的错误。稳定的释放用于生产使用,预计可以稳定运行长时间。 Apache Tomcat 9.x Apache Tomcat上9.x的是发展的当前焦点,它建立在Tomcat 8.0.x和实现了目前草案的Servlet 4.0规范,也将执行 JSP 2.4?,EL 3.1?,目前对WebSocket的1.2? 和JASPIC 1.1 规范工作的一次更新上这些规范为Java EE 8除此之外启动时,它包括以下显著改进: 添加对HTTP / 2的支持(需要APR /本地库) 添加对TLS虚拟主机的支持 添加了对使用JSSE连接器(NIO和NIO2)使用OpenSSL for TLS支持的支持。 Apache Tomcat 8.x 的Apache Tomcat 8.x的建立在Tomcat的7.0.x并实施 的Servlet 3.1,JSP 2.3,EL 3.0 和WebSocket的1.1规格。除此之外,还包括以下重大改进: 单个公共资源实现来替换早期版本中提供的多个资源扩展特性。 的Apache Tomcat 8.5.x的支持相同的Servlet,JSP,EL和WebSocket规范的版本的Apache Tomcat 8.0.x. 除此之外,它也实现了JASPIC 1.1规范。还有在许多领域显著变化引擎盖下,从而提高了性能,稳定性和总拥有成本。有关详细信息,请参阅Apache Tomcat 8.5更改日志。 Apache Tomcat 7.x 的Apache Tomcat 7.x的建立在Tomcat中6.0.x的改进和实现的Servlet 3.0, JSP 2.2,EL 2.2和 WebSocket的1.1规格。除此之外,它还包括以下改进: Web应用程序内存泄漏检测和预防 提高了Manager和Host Manager应用程序的安全性 通用CSRF保护 支持直接在Web应用程序中包含外部内容 重构(连接器,生命周期)和大量的内部代码清理 Apache Tomcat 6.x 的Apache Tomcat 6.x的建立在Tomcat中的5.5.x的改进和实现的Servlet 2.5和 JSP 2.1规范。除此之外,它还包括以下改进: 内存使用优化 高级IO功能 重构聚类 Tomcat的6的用户应该知道,Tomcat的团队已经公布了 的生命日期为Tomcat 6.x的结束。Tomcat 6.x的用户应该计划在Tomcat 6.x到达生命周期之前进行升级。 Apache Tomcat 5.x 的Apache Tomcat 5.x的是可以从档案下载。 的Apache Tomcat 5.5.X支持相同的Servlet和JSP规范版本的的Apache Tomcat 5.0.x中 还有在许多领域显著变化引擎盖下,从而提高了性能,稳定性和总拥有成本。有关详细信息,请参阅Apache Tomcat 5.5 Changelog。 的Apache Tomcat 5.0.x版在很多方面在Apache Tomcat 4.1的改进,其中包括: 性能优化和减少的垃圾收集 重构的应用程序部署器,具有可选的独立部署器,允许在Web应用程序投入生产之前进行验证和编译 使用JMX和管理器Web应用程序完成服务器监视 可扩展性和可靠性增强 改进了Taglibs的处理,包括高级池和标签插件 改进的平台集成,与本机Windows和Unix包装器 使用JMX嵌入 增强的安全管理器支持 集成会话聚类 扩展文档 Apache Tomcat 4.x 的Apache Tomcat 4.x版可以从档案下载。 的Apache Tomcat 4.x的实现了基于全新架构的新的servlet容器(称为卡特琳娜)。4.x的版本中实现的Servlet 2.3和JSP 1.2 规范。 的Apache Tomcat 4.1.x的是的Apache Tomcat 4.0.x的的重构,并含有显著增强功能,包括: 基于JMX的管理功能 JSP和Struts的管理Web应用程序 新的Coyote连接器(HTTP / 1.1,AJP 1.3和JNI支持) 重写Jasper JSP页面编译器 性能和内存效率提高 增强了与开发工具集成的管理应用程序支持 自定义Ant任务可以直接从build.xml脚本与管理器应用程序交互 的Apache Tomcat 4.0.x的。Apache Tomcat 4.0.6是旧的生产质量版本。4.0 servlet容器(卡塔利娜)已经从地上爬起来的灵活性和性能开发。4.0版实现了Servlet 2.3和JSP 1.2规范的最终发布版本。根据规范的要求,Apache Tomcat 4.0还支持为Servlet 2.2和JSP 1.1规范构建的Web应用程序,无需更改。 Apache Tomcat 3.x Apache Tomcat上3.X可以从档案下载。 版本3.3是当前生产质量放行了Servlet 2.2和JSP 1.1规范。Apache Tomcat 3.3是Apache Tomcat 3.x体系结构的最新延续; 它比3.2.4更先进,这是“老”的生产质量释放。 版本3.2.4是“旧的”生产质量版本,现在仅在维护模式。 版本3.1.1是旧版本。 所有的Apache Tomcat 3.X版本跟踪其遗产回到原来的Servlet和JSP实现,Sun公司捐赠给Apache软件基金会。该3.X版本都实现了支持Servlet 2.2和JSP 1.1规范。 的Apache Tomcat 3.3.X。版本3.3.2是当前的生产质量版本。它继续在3.2版本中开始的重构,并将其转化为其逻辑结论。3.3版本提供了更多的模块化设计,允许通过添加和删除控制servlet请求处理的模块来定制servlet容器。此版本还包含许多性能改进。 的Apache Tomcat 3.2.X。版本3.2自3.1以来增加了几个新功能; 主要的努力是重构内部以提高性能和稳定性。3.2.1版本,如3.1.1,是一个安全补丁。版本3.2.2修复了大量的错误和所有已知的规范合规性问题。版本3.2.3是一个安全更新,关闭一个严重的安全漏洞。版本3.2.4是一个小错误修复版本。所有Apache Tomcat 3.2.3之前版本的用户都应该尽快升级。除了修复关键安全相关的错误,Apache Tomcat 3.2.x分支上的开发已停止。 的Apache Tomcat 3.1.X。3.1版本包含对Apache Tomcat 3.0的几个改进,包括servlet重新加载,WAR文件支持和为IIS和Netscape Web服务器添加的连接器。最新的维护版本3.1.1包含了对安全问题的修复。Apache Tomcat 3.1.x没有进行积极的开发。Apache Tomcat 3.1的用户应该更新到3.1.1以关闭安全漏洞,强烈建议他们迁移到当前的生产版本Apache Tomcat 3.3。 的Apache Tomcat 3.0.x的。初始Apache Tomcat版本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值