我刚开始使用Checker Framework,并且存在一个问题,该问题完全可以在此框架作者的示例项目之一上重现。该项目可以在这里找到: https://github.com/typetools/checker-framework/tree/master/docs/examples/GradleExamples如何在检查器框架中显示完整的编译错误消息信息使用行号等
当我从root身份运行此命令:
>gradle compileJava
我收到此编译输出:
public static /*@Nullable*/ Object nullable = null;
^
required: @Initialized @NonNull Object
list.add(null); // error on this line
^
required: @Initialized @NonNull String
2 errors
:compileJava FAILED
正如你可以看到,没有任何信息在那里发生错误,如类名,代码中的行号等。 我在他们的官方手册中找不到任何有关可以适当更改输出格式的编译器参数的信息。我要的错误信息是这样的:
~\GradleExample.java:33 error: ';' expected
UPDATE:
我上实现3台这种行为:
-
- 操作系统:Microsoft Windows 7 64位旗舰版SP1 [版本6.1.7601];
- Java:1.8.0_73;
- Gradle:2.14。
-
- 操作系统:Microsoft Windows 10的x64 Pro的[版本10.0.14393]
- Java:1.8.0_121;
- Gradle:3.4.1。
-
- 操作系统:Microsoft Windows 7 64位旗舰版SP1 [版本6.1.7601]
- Java:1.8.0_121;
- Gradle:3.4.1。
缺少行号和类名与摇篮运行时,只有经历。我也尝试从Maven和命令行运行Javac来运行检查器,并且它运行得非常完美。
使用Gradle i配置Checker Framework遵循手动步骤。有3个步骤:
- 下载框架;
- 将其解压缩以创建检查器框架目录;
- 将Gradle配置为在类路径中包含Checker Framework。
据我所知,当通过依赖关系管理提供所需的Checker Framework的罐子时,Gradle会自动执行步骤1和步骤2。不过我想这两个选项:
- 依赖管理:
我只是下载示例项目,并从GradleJava7Example项目的根 执行“gradle这个compileJava”。 - 在gradle这个build文件手工编写的路径:
allprojects {
tasks.withType(JavaCompile).all { JavaCompile compile ->
compile.options.compilerArgs = [
'-processor', 'org.checkerframework.checker.nullness.NullnessChecker',
'-processorpath', "C:\\checker-framework-2.1.10\\checker\\dist\\checker.jar",
"-Xbootclasspath/p:C:\\checker-framework-2.1.10\\checker\\dist\\jdk8.jar",
'-classpath', 'C:\\checker-framework-2.1.10\\checker\\dist\\checker.jar;C:\\checker-framework-2.1.10\\checker\\dist\\javac.jar'
]
}
}
我无法重现您的问题。当我尝试这个例子时,输出包含了行号。你能提供更多细节吗?什么操作系统,什么版本的Java,什么版本的gradle,你使用GradleJava7Example还是GradleJava8Example,你使用Checker Framework发行版还是从GitHub等中克隆它?请给出一个完整的配方来重现问题,最好从安装Checker框架开始。然后其他人可以帮助你。 – mernst