Maven支持增量构建吗?

57

如何使用Maven支持增量构建?有指南吗?(谷歌的前几个结果令人失望)


1
试试使用Bing搜索引擎 - "增量Maven构建" - 它给了我这个链接,非常不错 - 关于增量构建插件的博客 - raksja
1
但它不提供“增量测试”的功能,即使构建是增量的,所有模块的测试也将运行。 - raksja
6个回答

20

我无法完全理解Maven社区驱动力的动态,但它并不支持对构建过程进行细粒度控制。

无论如何,在搜寻后,我在这里找到了一个适合我的答案:http://www.codesenior.com/en/tutorial/Java-Maven-Compile-Only-Changed-Files

请注意,将该值设置为false起初让我感到困惑,但在https://dev59.com/AmQn5IYBdhLWcg3wRVZs#19653164中有解释。

以下是方便起见复制的解释:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <useIncrementalCompilation>false</useIncrementalCompilation>
    </configuration>
</plugin>

关键在于将useIncrementalCompilation设置为false

我可以确认,当我运行构建时,我已经从以下状态转变:

[INFO] Changes detected - recompiling the module!
[INFO] Compiling 114 source files to /home/vagrant/workspace/splat/target/classes

[INFO] Compiling 1 source file to /home/vagrant/workspace/splat/target/classes

这使得我的增量构建少了几秒钟。现在我需要想办法禁用其他不必要的东西,以加快我的编辑/评估循环速度...


为了禁用所有其他不必要的内容,请尝试查看此帖子 https://dev59.com/8mgu5IYBdhLWcg3w0qNK#11081252 - deldev
我决定把我的构建问题视为X/Y问题,并且干脆摒弃了Maven。现在大家都更加开心了。 - robert

6
默认情况下,Maven是增量构建的,但是事实证明编译器插件(即javac核心)非常快,每次都新建构建在理智的代码库大小下不会成为瓶颈,与构建大型程序集或运行大型测试套件相比。 (与C ++相比,Java编译速度更快,像大多数语言一样。)

7
相比之下,在我的代码中,编译Java代码所花费的时间仅占总构建时间的大约1%,甚至可能更少。这段时间已经足够短了,以至于我_根本不在乎_是否要进一步优化它。 - Donal Fellows
17
问题存在于所有其他构建步骤(主要是单元测试、打包、其他插件如 Assembly 等)中,这些步骤都依赖于编译阶段。如果它们在编译是否有任何更改的情况下都被触发,那么人们试图避免增量构建时浪费的时间就会全部丢失。请注意,我的翻译尽可能保持原意,通俗易懂,不含解释或额外信息。 - uvsmtid
9
Maven 不支持增量构建。Maven 的创建者正在使用新的生命周期解决这个问题。我完全不知道为什么管理员 @Ryan 删除了一个提到这个网址的答案:http://stackoverflow.com/posts/28224819/revisions。 - Adam Gent
33
“编译器插件非常快,每次构建都不会成为一个瓶颈(对于合理的代码库大小)。 ”-真的吗?这种推理与以下类似:您为什么要修复一个使应用程序崩溃并自动快速重启的错误,而修复该错误需要花费数小时的时间。 - Ben
5
像这样的答案,正是我永远不会自愿使用Maven的原因。文档质量差,没有直截了当的回答,过多地涉及“神秘”内容。 - robert
显示剩余4条评论

6

我假设这与Maven 3.1的增量编译类似。 https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#useIncrementalCompilation - kisna
5
链接已损坏。 - Dilip Raj Baral
已移至GitHub: https://github.com/vsellier/maven-incremental-build - Julien Carsique

5

Takari Maven生命周期

现在,由于takari-lifecycle-plugin,这是可能的。请查看此示例项目:maven-incremental-compilation

示例输出

[INFO] --- takari-lifecycle-plugin:1.10.2:compile (default-compile) @ maven-incremental-compilation ---
[INFO] Performing incremental build
[INFO] Compiling 2 sources to /home/mariuszs/maven-incremental-compilation/target/classes
[INFO] Compiled 1 out of 2 sources (670 ms)

更多信息


(注:本翻译仅供参考,如果有需要请自行查证。)

5

只是一个提示,可以期待的是 - 700多个模块项目的构建时间从50分钟缩短到4分钟。 - ursa

4

Maven支持使用命令行参数-pl-am-amd构建多模块项目的子集,分别用于指定要构建的模块、构建依赖模块和构建依赖模块。此外,它还会仅编译给定模块中已更改的源文件(实际上不是Maven的功能,而是javac的功能)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接