当前位置: 首页 > 面试题库 >

Maven编译器插件始终将一组源检测为“陈旧”

皇甫宇定
2023-03-14
问题内容

修正:这是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
...

仅适用于某个程序包中的文件, 可能未从其余代码中引用该文件;不适用于我的源代码,我只是在尝试弄乱该版本)

编译不会失败,并且会在以下时间生成带有更新时间戳记的类

/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是可行的替代品;现在,每次仅重新编译有问题的软件包(相反,整个代码库)。



 类似资料:
  • Maven编译器插件没有将生成的类(mapstruct中的映射器)复制到target\generated test sources\test annotation。目录已创建,但为空。生成的类仅复制到目标\生成的源\注释。 这是我的maven编译器插件配置: 谢谢你!

  • 新的Maven项目是在eclipse中创建的。但是Pom.xml显示了一些错误。 “无法计算构建计划:Plugin org.apache.maven。插件:maven resources插件:2.6或其一个依赖项无法解析:未能读取org.apache.maven的工件描述符。插件:maven resources插件:jar:2.6 Plugin org.apache.maven。插件:maven

  • 我在maven-compiler-plugin的pom.xml中有以下配置。 JDK的源版本和目标版本应该是什么?它如何依赖于安装在我的计算机上的jdk版本?他们可能不一样吗?例如,安装的jdk是1.8,在源参数-1.6,目标-1.7中。

  • 我在本地安装了java11,我正在使用maven编译器插件将其源/目标设置为1.8,在我的代码中我正在使用

  • 我知道这是一个重复的问题,但其他话题的答案对我没有帮助。 我使用的是Eclipse光子,Java版本:10,我在Eclipse和pom中将jdk/jre版本设置为10。xml文件。我已经改变了。ini文件: -dosgi.requiredJavaVersion=10(设置为1.8) 我还在我的pom中添加了插件。xml: 没有任何帮助。这是我的pom。xml: 这些依赖项没有在类文件中读取,我也尝

  • 我已经搜索了所有关于为什么我们应该有不同于目标的来源,但不一致的答案: 如果JDK向下兼容,为什么在1.7上编译时需要将目标设置为1.8? 将源设置为高于目标将不起作用,例如错误: 源版本8需要目标版本1.8 同样来自Maven: 仅仅设置target选项并不能保证代码在具有指定版本的JRE上实际运行。陷阱在于无意中使用了只存在于后来的JRE中的API,这会导致代码在运行时出现链接错误 有人能举个