【发布时间】:2012-02-13 15:30:49
【问题描述】:
如何使用 Maven 来支持增量构建?哪里有导游? (谷歌搜索结果令人失望)
【问题讨论】:
-
试试 Bing -“增量 Maven 构建” - 它给了我这个非常好的 - blog on incremental build plugin
-
但它不提供“增量测试”的功能,所有模块的测试都会运行,即使构建是增量发生的。
如何使用 Maven 来支持增量构建?哪里有导游? (谷歌搜索结果令人失望)
【问题讨论】:
我不太清楚驱动 Maven 社区的动力,但它对对构建过程进行细粒度控制并不友好。
无论如何,在四处挖掘之后,我在这里找到了一个适合我的答案:http://www.codesenior.com/en/tutorial/Java-Maven-Compile-Only-Changed-Files
请注意,将值设置为 false 一开始让我很困惑,但这里给出了解释:https://stackoverflow.com/a/19653164/409638
为方便起见,在此转载:
<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
这使我的增量构建减少了几秒钟。现在我要做的就是弄清楚如何禁用所有其他会减慢我的编辑/评估周期的不必要的杂物......
【讨论】:
Maven 默认增量构建,但事实证明编译器插件(即 javac 的核心)是如此之快,以至于每次构建新的代码库都不是瓶颈,而不是与构建大型程序集或运行大型测试套件。 (与大多数语言一样,Java 的编译速度比 C++ 快得多。)
【讨论】:
the compiler plugin is so fast that building fresh every time is not a bottleneck with sane codebase sizes - 认真的吗?该推理与以下相同:您为什么要修复一个使您的应用程序不断崩溃的错误,该错误会自动以超快的速度重新启动,而修复该错误需要数小时。
如果您的项目有数百个模块,您可以使用maven-incremental build plugin。它节省了很多时间。
【讨论】:
是的,感谢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)
【讨论】:
Maven 支持使用命令行参数-pl、-am 和-amd 来构建多模块项目的子集,分别指定要构建的模块、构建依赖项和构建依赖项。它也只会编译任何给定模块中更改的源文件(不是真正的 Maven 功能,而是 javac 功能)。
【讨论】:
更新:真正的增量构建支持 - 类似于 Gradle 中的支持 - 已在 Maven 代码库中实现。介绍视频在这里:https://youtu.be/DEQG4CNFMFE
虽然到目前为止 maven 核心不支持缓存,但你可以查看这个 PR——它是一个真正的增量构建,支持远程缓存。它还支持几乎所有插件 - https://github.com/apache/maven/pull/526
您可以从分支构建和尝试 maven 并享受。我们正在努力将缓存以核心扩展的形式引入 Maven
亲切的问候 亚历克斯
【讨论】: