当我在更改任何内容后运行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]
答案 0 :(得分:2)
Maven插件必须由他们自己(可能使用帮助程序)实现过时检查,他们可以自由记录原因,因此没有通用答案(与Gradle相反)。总的来说,Maven增量构建支持相当差(例如,参见https://cwiki.apache.org/confluence/display/MAVEN/Incremental+Builds,这是相当陈旧的,但仍然大多是正确的AFAICT),并且严重依赖于每个插件(及其版本)
您可以尝试使用调试日志(mvn -X
)运行Maven并深入了解日志。但首先尝试使用最新版本的插件。这并不意味着您已经得到了关于为什么输入被视为已经过时的答案,或者它确定了观察到的行为;但除了调试插件本身外,还没有其他解决方案。