大约一周前,我们开始在测试中遇到此错误。它一直在开启和关闭——有时人们会得到它,而有时他们不会。
/.../product/integration/src/test/java/com/acme/integration/code/CodeTestUtils.java:74: error: invalid use of @throws
* @throws Exception if an error occurs.
我想错误信息有点模糊。无效怎么办?代码对我来说看起来不错:
/**
* Iterates to find modules and then calls
* {@link #checkModule(Path, String, DirectoryStream.Filter, CheckFile)} for each.
*
* @param subPath the path within each module to start checks from.
* @param filter the filter to apply to choose which files to check.
* @param checkFile the checks to perform on each file.
* @throws Exception if an error occurs.
*/
public static void checkProject(String subPath, DirectoryStream.Filter<Path> filter, CheckFile checkFile) throws Exception
{
for (Path file : listFiles(EnvironmentUtils.getDevelopmentRoot().toPath()))
{
if (FileUtils.isDirectory(file) && FileUtils.exists(file.resolve("src/java")))
{
checkModule(file, subPath, filter, checkFile);
}
}
}
我们确实在编译期间打开了doclint,因为我们想查找有关Javadoc 错误的信息,而不必单独运行Javadoc。
这个错误到底是什么意思?我们在这里所做的有什么无效的吗?我们是否正在查看编译器错误?当然,像这样的错误会打击第一个试图声明方法抛出异常的人...... :(
目前调查...
- 我设法将示例缩减为一个给出相同错误的简单项目。除了 Travis CI 能够在 Linux 上重现它之外,我可以在 macOS 上重现它,从今天开始(不知道为什么这是时间相关的!)Windows 上的其他用户已经讨论了几天了。
- 从这个项目中,我查看了 Gradle 用于 javac 的命令行,并设法得到相同的错误,以显示直接调用 javac。
进一步减少 javac 命令行:
javac -source 1.8 -target 1.8 -d build/classes/test \ -classpath build/classes/main:build/resources/main:$HOME/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.8.2/979fc0cf8460302e4ffbfe38c1b66a99450b0bb7/log4j-core-2.8.2.jar:$HOME/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.8.2/e590eeb783348ce8ddef205b82127f9084d82bf3/log4j-api-2.8.2.jar \ -Xdoclint:all,-missing \ src/test/java/com/acme/CodeTestUtils.java
这说明在图片中没有Gradle的情况下问题依然存在。(Gradle 也添加
-processorpath
了-g
。)