maven.compiler.verbose财产怎么样?
如果我将其设置为 true 我会得到
% mvn compile -Dmaven.compiler.verbose=true 2>&1 | grep class
[INFO] Nothing to compile - all classes are up to date
Run Code Online (Sandbox Code Playgroud)
或者如果我修改A.java文件
% mvn compile -Dmaven.compiler.verbose=true 2>&1 | grep class | grep wrote
[wrote RegularFileObject[/tmp/mvn-compile/target/classes/A.class]]
[wrote RegularFileObject[/tmp/mvn-compile/target/classes/B.class]]
... and other similar output
Run Code Online (Sandbox Code Playgroud)
您还可以更深入地了解您的操作系统并跟踪(例如,strace在某些 Linux 发行版上)write系统调用(posix 兼容平台)并 grep.class正在写入的文件。
您还可以使用-Dmaven.compiler.fork=truewhich fork选项javac(这曾经是默认选项,但显然不再是默认选项)。您可以跟踪 javac 的参数,这些参数是通过临时文件传递的(仅在 javac 执行期间存在,例如它是/tmp/org.codehaus.plexus.compiler.javac.JavacCompiler2179201625419771061arguments)。您还可以cat通过此文件查看哪些文件被传递给 javac 进行重新编译。就我而言(Mac OS X),该文件存储在/tmp并输出它,我天真地运行
% cd /tmp; while true; do ls org.codehaus.plexus.compiler.javac.JavacCompiler* | xargs cat; sleep 1; done
zsh: no matches found: org.codehaus.plexus.compiler.javac.JavacCompiler*
zsh: no matches found: org.codehaus.plexus.compiler.javac.JavacCompiler*
zsh: no matches found: org.codehaus.plexus.compiler.javac.JavacCompiler*
"-d"
"/tmp/mvn-compile/target/classes"
"-classpath"
"/Users/stepan/.m2/repository/com/typesafe/config/1.3.0/config-1.3.0.jar:/Users/stepan/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.6.4/jackson-core-2.6.4.jar:"
"-sourcepath"
"/tmp/mvn-compile/src/main/java/A.java"
"/tmp/mvn-compile/src/main/java/B.java"
"-s"
"/tmp/mvn-compile/target/generated-sources/annotations"
"-g"
"-verbose"
"-nowarn"
"-target"
"1.8"
"-source"
"1.8"
"-encoding"
"UTF-8"
Run Code Online (Sandbox Code Playgroud)
另一个问题是 Maven 如何决定重新编译哪个类。如果我没记错的话,它曾经基于.java文件时间戳与其.class匹配文件的比较。如果.java文件较新,则将其添加到 javac 中以重新编译。但是,我现在可以看到,它要复杂得多,要了解原因,我建议调试 maven 执行并查看AbstractCompilerMojo.java其execute方法。
例如,如果package-info.java我的源目录中有文件,则所有类总是会重新编译,即使它们没有更改。
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |