我正在思考一个想法,想向开发人员社区提出一个问题。当我在一个大型JAVA项目中工作时,在实践中使用maven有许多惊人的好处。然而,项目正在快速发展,随着时间的推移,越来越多的模块出现,从而导致了巨大的构建时间,这对持续集成产生了影响。
问-有没有一些开箱即用的功能,可以让智能项目构建首先检查模块目标jar是否与位于本地maven存储库中的不同。如果后者是真的,那么maven可以继续到下一个模块,而不需要重新构建和重新部署相同的模块?
问候
发布于 2012-08-26 04:35:28
最好的方法是切换到Maven3,它支持通过
mvn -T 3.0C clean package还可以帮助构建已更改的内容,这可以通过Maven实现:
mvn -pl module -am package此外,许多CI系统,如jenkins,也支持增量构建。此外,检查哪种类型的测试正在运行?你能并行运行单元测试吗?(maven-surefire-plugin)。这些单元测试是真正的单元测试,还是可能是一些集成测试?
发布于 2012-08-26 01:52:22
这个问题没有灵丹妙药。这是许多大型项目所面临的普遍问题。
CI通常是由SCM提交触发的,所以我认为有些东西总是会发生变化。
如果不知道您使用的是什么CI,模块是如何配置的等等,除了一些基础知识之外,我不能提供太多的建议。
1)确保您在CI中配置的模块是尽可能细粒度的-即尽可能小的构建单元。这意味着单次提交不需要重新构建大量代码。
2)开发者习惯:只提交一个完整的工作单元。这就是Git的意义所在。开发人员在本地提交,然后仅在工作单元完全完成时才推送到主程序。这减少了下游CI构建。
3)查看您在Maven中使用的报表和模块。有些人永远也跑不动。你真的需要他们全部吗?
发布于 2012-08-27 01:52:55
问题-有没有一些开箱即用的功能,可以让智能项目构建首先检查模块目标jar是否与位于本地maven存储库中的不同?
我所知道的唯一的“聪明”是在你不需要的构建中跳过“干净”阶段-这样一些源代码就不会被编译,或者不必要地重新生成资源。尽管如此,项目仍将重新打包。
您还可以考虑将一些模块排除在不同的开发周期中(除非您确实需要在每个版本中对所有模块进行更改)。然后,更改频率较低的模块可以作为来自存储库的依赖项包括在内-它们将需要单独构建和部署。
https://stackoverflow.com/questions/12124155
复制相似问题