maven编译器插件未传递编译器J-Xbootclasspath/p参数



-J-Xbootclasspath/p:不是由maven编译器插件传递的,我该如何解决

系统环境:jdk 1.8.0_265,windows 10.
maven文件:我从CheckerFramework示例pom.xml中复制了它。

<compilerArgs>
<!-- using github.com/google/error-prone-javac is required when running on JDK 8 -->
<arg>-J-Xbootclasspath/p:${errorProneJavac}</arg>
<!-- -Awarns treats Checker Framework errors as warnings -->
<!-- <arg>-Awarns</arg> -->
<!--
For the Subtyping Checker, annotations defined in module 'your-qual-artifact':
<arg>-Aquals=myPackage.qual.MyFenum,myPackage.qual.MyCustomType</arg>
-->
<arg>-Alint</arg>
<!-- If using JDK 11 remove the two arguments above and uncomment the one below. -->
<!-- <arg>-J- -add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg> -->
<!-- -Awarns turns type-checking errors into warnings. -->
<!-- <arg>-Awarns</arg> -->
</compilerArgs>

当我第一次通过mvn clean编译运行它时,它与一起失败了

未能在项目maven上执行目标org.apache.maven.plugins:maven编译器插件:3.8.1:编译(默认编译(示例:编译失败

所以我运行mvn-clean-compile-X,然后发现命令行选项中没有包含-J-Xbootclasspath/p:/path/to/javac.jar
然后我将包括"-J-Xbootclasspath/p";在和中,javac对其进行了编译,并取得了成功。但我需要在maven中使用它,所以我提出了这个问题。

这是打印的失败命令行选项

[DEBUG]
-d d:\workproject\TestCheck\target\classes
-classpath d:\workproject\TestCheck_target\cclasses;C: \用户\张云.m2\repository\org\checkerframework\checker-qual\3.6.1\checker-quali-3.6.1.jar;C: \用户\张云.m2\repository\com\google\errorprodend\javac\9+181-r4173-1\javac-9+181-r4173-1.jar;C: \用户\张云.m2\repository\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;C: \用户\张云.m2\repository\javax\servlet\servlet-api\2.4\servlet-alpi-2.4.jar
-sourcepath D:\workproject\TestCheck\src\main\java;D: \workproject\TestCheck\target\generated sources\annotations;D: \workproject\TestCheck\src\main\java\main.java-s D:\workproject\TestCheck\target\generated sources\annotations
-processor org.checkerframework.checker.NullnessChecker
-processorpath C:\Users\张云.m2\repository\org\checkerframework\checker\3.6.1\checker-3.6.1.jar;-g-详细-目标1.8-源1.8-编码UTF-8-Alint

这是完整的日志文件日志

和项目文件

感谢您提供该项目;这很有帮助。

当我运行mvn -e -B clean install --debug时,Checker框架工作正常:它在文件Main.java:的第10行发出了一个关于return null的错误

[ERROR] /home/mernst/tmp/TestCheck/src/main/java/Main.java:[10,15] error: [return.type.incompatible] incompatible types in return.
type of expression: null
method return type: @Initialized @NonNull String

完整日志位于https://pastebin.com/4kHe4WMz。

我的输出和您提供的日志之间存在一些可疑的差异。

当在您提供的项目上运行时,我的输出包含:

<compilerArgs>
<arg>-J-Xbootclasspath/p:${com.google.errorprone:javac:jar}</arg>
<arg>-Alint</arg>
</compilerArgs>

相比之下,您粘贴的日志包含:

<compilerArgs>
<arg>-Alint</arg>
</compilerArgs>
<compilerArgument>-J-Xbootclasspath/p:/a/b</compilerArgument>

我无法解释其中的差异。例如,我不知道输出中的/a/b路径来自哪里,因为它不会出现在您提供的项目中。我怀疑您粘贴的日志来自不同的项目,具有与您提供的项目不同的pom.xml

最新更新