java - Maven 编译器插件总是将一组源检测为 "stale"

已修复:这是一个 known bug在 maven-compiler-plugin 3.1 中

我正在将 1000 多个 java-sources 项目的基于 ant 的构建转换为 maven。到目前为止一切顺利,但每次启动 mvn compile 它都会重新编译所有内容(而不是重用旧类)

使用 mvn -X compile 报告

[DEBUG] Stale source detected: /project_path/src/main/java/package_path/AFile1.java
[DEBUG] Stale source detected: /project_path/src/main/java/package_path/AFile2.java
...

(仅适用于某个包中的文件,其余代码可能未引用该文件;不是我的来源,我只是想对构建进行 mavenize)

编译没有失败,并且正在生成具有更新时间戳的类

/project_path/target/classes/package_path/AFile1.class
/project_path/target/classes/package_path/AFile2.class
...

但是,在查看时间戳时,java 文件自昨天以来没有更改,并且类文件是最新的。为什么这些来源被确定为陈旧的?我该如何调试这个问题?。

即使没有发生任何更改,也必须重新编译 1k+ 文件是一件很麻烦的事情......


样本输出:

$ mvn clean compile
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building MyProject 1.9.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for net.sourceforge:jffmpeg:jar:1.1.0 is missing, no dependency information available
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ my-project ---
[INFO] Deleting /project_path/target
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ my-project ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /project_path/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-project ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1162 source files to project_path/target/classes
....
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.215s
[INFO] Finished at: Tue Jul 30 12:42:25 CEST 2013
[INFO] Final Memory: 25M/429M
[INFO] ------------------------------------------------------------------------



$ mvn compile
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building MyProject 1.9.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for net.sourceforge:jffmpeg:jar:1.1.0 is missing, no dependency information available
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ my-project ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /project_path/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-project ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1162 source files to /project_path/target/classes
... 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.140s
[INFO] Finished at: Tue Jul 30 12:42:44 CEST 2013
[INFO] Final Memory: 22M/379M
[INFO] ------------------------------------------------------------------------

最佳答案

这是 maven-compiler-plugin 3.1 中的一个已知问题。正在跟踪 https://issues.apache.org/jira/browse/MCOMPILER-209 (useIncrementalCompilation 标志已损坏)。

这个问题与另一个 3.1 错误无关,https://issues.apache.org/jira/browse/MCOMPILER-205 (不产生 .class 输出的文件总是被标记为“陈旧”)。

经过进一步测试,回到 3.0 并没有真正解决问题(它只在下一次 mvn clean compile 之前有效。但是,正如 Michael Lemke 在评论中建议的那样,标记 useIncrementalCompilationfalse 是一个可行的替代方案;现在,每次只重新编译有问题的包(而不是整个代码库)。

关于java - Maven 编译器插件总是将一组源检测为 "stale",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944108/

相关文章:

java - 使用 Maven 从文件名中删除版本号

java - eclipse 中 "Build Automatically"选项的用途

javascript - 在 javascript eslint 中允许使用分号

windows - 执行 : "gcc": executable file not found in

c# - 如何强制 VS 2010 跳过未更改的项目的 "builds"?

.net - 复制本地如何工作? log4net.dll 没有被复制到 MyProject 输出目录

xcode4 - Xcode 自定义构建配置导致静态库出现 "library/file not fo

java - 项目的 POM 丢失,没有可用的依赖信息

Xcode - 如何查看构建命令和日志?

c - 开始使用自动工具