java - maven 编译器插件不通过编译器 J-Xbootclasspath/p args
问题描述
-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 compile 运行它时,它与
无法在项目 MavenExample 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile)Example:编译失败
所以我运行 mvn clean compile -X 然后发现 -J-Xbootclasspath/p:/path/to/javac.jar 不包含在命令行选项中。
然后我在其中包含“-J-Xbootclasspath/p”并手动 javac 编译它,它成功了。但是我需要在maven中使用它,所以我问了这个问题。
这是打印的失败命令行选项
[调试]
-d D:\workproject\TestCheck\target\classes
-classpath D:\workproject\TestCheck\target\classes;C:\Users\张云.m2\repository\org\checkerframework\checker-qual\3.6。 1\checker-qual-3.6.1.jar;C:\Users\张云.m2\repository\com\google\errorprone\javac\9+181-r4173-1\javac-9+181-r4173-1。 jar;C:\Users\张云.m2\repository\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;C:\Users\张云.m2\repository\javax\servlet\ servlet-api\2.4\servlet-api-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.nullness.NullnessChecker
-processorpath C:\Users\张云.m2\repository\org\checkerframework\checker\3.6.1\checker-3.6.1.jar;-g -verbose -target 1.8 -source 1.8 -encoding UTF-8 -Alint
这是完整的日志文件日志
和项目文件
解决方案
感谢提供项目;这很有帮助。
当我运行时,检查器框架工作正常:它在文件的第 10 行mvn -e -B clean install --debug
发出了一个错误:return null
Main.java
[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
您提供的项目不同。
推荐阅读
- java - 在一定的时间间隔内执行java程序
- c# - 无法将派生类分配给其父泛型接口
- css - ReactJS CSS backgroundImage在滚动调整窗口大小时在底部创建空白
- python - Python Flask 应用程序处理 web 并使用 websockets 与另一个应用程序通信
- python - 在函数中传递名称并将其用作 Pandas 列中的值
- c# - AuthenticationFailedContext.Success() 在处理 JwtBearerEvents.OnAuthenticationFailed 时没有效果
- php - “使用 Laravel 调用未定义的方法 Illuminate\\Database\\Query\\Builder::users()
- node.js - Node js在单个项目下创建Dialogflow代理
- mysql - Illuminate\Database\QueryException : SQLSTATE[HY000] [1044] 用户 ''@'localhost' 拒绝访问数据库 'forge'
- sql-server - xml /XSD 文件源 ssis 2010 - 根级别的数据对 SQL Server 表无效