您更喜欢哪种方法来改进 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 项目的增量构建?的主要内容,如果未能解决你的问题,请参考以下文章

基于maven构建javaweb项目思路梳理及改进

您更喜欢向朋友展示您当地的 Rails 项目吗? [关闭]

Maven 学习笔记 基础环境搭建

java增量构建关于lambda表达式的问题

心得分享Maven的项目管理和项目构建优势

构建被配置为更喜欢设置存储库而不是项目存储库,但存储库“maven”是由构建文件“build.gradle”添加的