您更喜欢哪种方法来改进 Maven 项目的增量构建?
Posted
技术标签:
【中文标题】您更喜欢哪种方法来改进 Maven 项目的增量构建?【英文标题】:What approach of improving incremental building of the maven projects do you prefer? 【发布时间】:2012-03-07 14:16:42 【问题描述】:我将优化构建项目的时间。最耗时的事情之一是项目的编译。
由于这里特别提到的 maven 的已知问题: Maven incremental building 我们必须在每个构建过程之前使用 mvn clean。
我调查了这个问题,发现了两种方法:
-
Incremental-build-plugin Maven Mojo
Maven 2 Reactor Plugin
我已经测试了Incremental-build-plugin Maven Mojo,看起来还不错。正如我所见,Maven 2 Reactor Plugin 实现了几乎相同的功能,但应指定特殊命令以实现结果(例如 mvn reactor:make)。
所以我得出结论,Maven 2 Reactor Plugin 仅对开发人员来说更方便,如果他们要优化本地计算机上建筑物的时间。但我有些犹豫,因为 Maven 2 Reactor Plugin 是托管的,并且(我认为)作为官方 maven 插件支持,但 Incremental-build-plugin Maven Mojo 托管在 java.net 上。
我的问题是:
-
我的结论是这两个插件解决了几乎相同的问题吗?
有没有人有使用这两个插件的经验并能就它们提供任何反馈?
您还有其他优化建筑的想法吗?
【问题讨论】:
我的问题是:编译需要多长时间?测试需要多长时间?那是什么关系呢? 【参考方案1】:上面提到的两个插件都不会加快用例的编译时间。如果您想加快编译时间,我建议您更新到具有并行构建支持的 maven 3。
但是,除了reactor插件的svn相关功能之外,使用maven3也可以开箱即用地实现上述插件所做的事情。为此,您需要上一篇文章中提到的 jenkins。
有用的 maven 3 功能可加快您的构建速度:
mvn clean compile -T 3 (using three threads for paralell builds)
mvn -amd -pl groupid:arifactId (builds the specified projects and all dependent artifacs)
【讨论】:
【参考方案2】:reactor 插件更适用于当您只想在构建中构建模块的子集时,增量插件更旨在仅构建自上次编译以来发生更改的那些模块。
虽然我可以看到您使用任何一种效果都相同,但您可能对您所说的增量构建插件更感兴趣。是否可以一起使用这两者来确保只构建所需的模块/依赖项,如果它们有未编译的更改我不知道。
PS - 我认为在最新的增量构建插件版本中已经修复了干净的错误。
【讨论】:
【参考方案3】:您是否尝试过使用 Jenkins(或 Hudson)?它非常好,可以管理许多小的依赖项目。在服务器上设置也很容易。我建议至少尝试一下。设置服务器并配置 20 个 maven 项目只需几分钟。
我喜欢它的地方是它会监控你的源代码管理并每隔 X 分钟执行一次构建,它会自动连续构建任何上游项目。
【讨论】:
Hudson/Jenkins 没有优化构建(这是 OP 的问题)。此外,当构建需要很长时间时,使用 H/J 将无助于本地构建以上是关于您更喜欢哪种方法来改进 Maven 项目的增量构建?的主要内容,如果未能解决你的问题,请参考以下文章