我怎样才能找到Maven重建的原因?

我怎样才能找到Maven重建的原因?,maven,gwt,maven-war-plugin,gwt-maven-plugin,Maven,Gwt,Maven War Plugin,Gwt Maven Plugin,当我在不做任何更改的情况下运行Maven时,Maven编译器插件经常重新编译Java文件;或者maven-war插件重建或复制战争,即使没有任何改变;或者gwt-maven-plugin构建谷歌网络工具包代码(在某些计算机上,而不是在其他计算机上),即使没有任何更改 我如何理解Maven决定重建某些东西的原因?例如,它认为(错误地)更改了哪些文件 下面是一个例子:maven编译器插件每次都会重新编译war资源,即使没有任何更改。它使用“爆炸式”战争来节省开发时间,但即使是常规战争也会发生这种情况

当我在不做任何更改的情况下运行Maven时,
Maven编译器插件
经常重新编译Java文件;或者
maven-war插件
重建或复制战争,即使没有任何改变;或者
gwt-maven-plugin
构建谷歌网络工具包代码(在某些计算机上,而不是在其他计算机上),即使没有任何更改

我如何理解Maven决定重建某些东西的原因?例如,它认为(错误地)更改了哪些文件

下面是一个例子:
maven编译器插件
每次都会重新编译war资源,即使没有任何更改。它使用“爆炸式”战争来节省开发时间,但即使是常规战争也会发生这种情况

但我的问题更一般地说是,如何找出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]

Maven插件必须自己实现陈旧性检查(可能使用帮助程序),并且可以自由记录原因,因此没有通用的答案(与Gradle相反)。总的来说,Maven增量构建支持相当差(例如,请参阅,它非常旧,但仍然大部分是正确的AFAICT),并且严重依赖于每个插件(及其版本)


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

这是一个单模块项目还是一个多模块项目?您使用哪个版本的插件?最好是显示您构建的日志文件…或项目本身…多模块。什么样的日志?只是Maven输出?我在上面添加了一个示例。但我的问题更一般地说是如何找出为什么任何Maven插件——无论是GWT、war、compile还是其他插件——选择重建而不是使用现有的输出。您还没有回答关于版本的问题吗?您使用哪些版本的插件?你使用哪个版本的Maven?对于maven war插件,maven compile plugin您可以查看源代码…maven 3.3.9 jdt.compiler.version 0.24.0 appengine maven plugin 1.3.1 gcloud maven plugin 2.0.9.133.v201611104版本maven plugin 2.3构建助手maven plugin 3.0.0 gwt maven plugin 1.6.0 maven war plugin 3.1.0