2

当我什么都没改变后运行Maven时,maven-compiler-plugin经常重新编译Java文件;或maven-war-plugin重建或复制战争,即使没有任何改变;或gwt-maven-plugin构建 Google Web Toolkit 代码(在某些计算机上,而不是其他计算机上),即使没有任何改变。

我怎样才能看到 Maven 决定重建某些东西的原因?例如,它认为(错误地)哪些文件发生了变化?

这是一个例子:maven-compiler-plugin每次都重新复制战争资源,即使没有任何变化。它使用“爆炸式”战争来节省开发时间,但即使在常规战争中也会发生这种情况。

但我的问题更普遍的是如何找出Maven 目标选择重建而不是使用现有输出的原因。

[INFO] Processing war project
[INFO] Copying webapp webResources [d:\dev\proj1/war/WEB-INF] to [d:\dev\proj1\target\proj1-0.0.1-SNAPSHOT]
[INFO]  Copying webapp webResources [d:\dev\proj1/lib/libs] to [d:\dev\proj1\target\proj1-0.0.1-SNAPSHOT]
[INFO]  Copying webapp resources [d:\dev\proj1\war]
 Webapp assembled in [37919 msecs]
4

1 回答 1

2

Maven 插件必须自己实现过时检查(可能使用帮助程序),并且它们可以自由地记录原因或不记录,因此没有通用答案(与 Gradle 相反)。总体而言,Maven 增量构建支持相当差(例如,参见https://cwiki.apache.org/confluence/display/MAVEN/Incremental+Builds ,它已经很老了,但仍然大部分是正确的 AFAICT),并且严重依赖在每个插件(及其版本)上

您可以尝试使用调试日志 ( mvn -X) 运行 Maven 并深入研究日志。但首先尝试使用最新版本的插件。这并不意味着你会知道为什么输入被认为是过时的,或者它会修复观察到的行为;但除了调试插件本身之外,真的没有其他解决方案。

于 2017-06-28T08:19:48.817 回答