Maven编译插件总是将一组源代码检测为“过时”。

8 浏览
0 Comments

Maven编译插件总是将一组源代码检测为“过时”。

已知maven-compiler-plugin 3.1中存在一个bug,每次运行mvn compile时会重新编译所有文件(而不是重用旧的类)。

使用mvn -X compile命令会报告以下信息:

[DEBUG] 检测到过时的源文件:/project_path/src/main/java/package_path/AFile1.java

[DEBUG] 检测到过时的源文件:/project_path/src/main/java/package_path/AFile2.java

...

(仅针对某个特定包中的文件,这些文件可能与代码的其余部分没有引用,这不是我的源文件,我只是试图将构建过程转换为maven)

编译不会失败,并且更新时间戳的类会生成在以下目录:

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

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

...

但是,查看时间戳时,java文件自昨天以来没有发生变化,而类文件是最新的。为什么这些源文件被认定为过时?我该如何调试此问题?

即使没有发生任何更改,每次都重新编译1k+个文件真是太麻烦了...


示例输出:

$ mvn clean compile

[INFO] 扫描项目...

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] 正在构建MyProject 1.9.0-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[WARNING] 未找到net.sourceforge:jffmpeg:jar:1.1.0的POM文件,无法提供依赖信息

[INFO]

[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ my-project ---

[INFO] 正在删除/project_path/target

[INFO]

[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ my-project ---

[debug] 执行上下文化

[INFO] 使用'UTF-8'编码复制过滤后的资源。

[INFO] 跳过不存在的资源目录/project_path/src/main/resources

[INFO]

[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-project ---

[INFO] 检测到变化 - 重新编译模块!

[INFO] 正在编译1162个源文件到/project_path/target/classes

....

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] 总时间:11.215s

[INFO] 完成时间:Tue Jul 30 12:42:25 CEST 2013

[INFO] 最终内存:25M/429M

[INFO] ------------------------------------------------------------------------

$ mvn compile

[INFO] 扫描项目...

[INFO]

[INFO] ------------------------------------------------------------------------

[INFO] 正在构建MyProject 1.9.0-SNAPSHOT

[INFO] ------------------------------------------------------------------------

[WARNING] 未找到net.sourceforge:jffmpeg:jar:1.1.0的POM文件,无法提供依赖信息

[INFO]

[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ my-project ---

[debug] 执行上下文化

[INFO] 使用'UTF-8'编码复制过滤后的资源。

[INFO] 跳过不存在的资源目录/project_path/src/main/resources

[INFO]

[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-project ---

[INFO] 检测到变化 - 重新编译模块!

[INFO] 正在编译1162个源文件到/project_path/target/classes

...

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] 总时间:12.140s

[INFO] 完成时间:Tue Jul 30 12:42:44 CEST 2013

[INFO] 最终内存:22M/379M

[INFO] ------------------------------------------------------------------------

0