【发布时间】:2017-10-31 17:58:52
【问题描述】:
大约一周前,我们开始在测试中遇到此错误。它一直在开启和关闭 - 有时人们会得到它,而有时他们不会。
/.../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。
这个错误到底是什么意思?我们在这里所做的有什么无效的吗?我们是否正在查看编译器错误?肯定会遇到这样的错误,第一个尝试声明方法抛出异常的人... :(
到目前为止的调查......
- 我设法将示例缩减为simple project,其中gives the same error。除了 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。)
【问题讨论】:
-
好吧,首先发送
Exception会出现问题,因为您无法正确管理异常,因为您不知道它到底是什么异常(我看到Path,所以会有IOException,可能更多checkModule)。所以它至少应该是一个警告;)作为你真正的问题,你有没有注意到用户收到这个错误的任何模式? (操作系统、IDE 编码、JDK 版本......)我从来没有得到过这样的东西,所以我会押注文件本身。 -
无法使用与您相同的文档重新生成问题。
-
我们现在可以在 Windows 和 macOS 上看到它,并且正在等待我们的单个 Linux 用户使用它。似乎一开始只有一个人可以看到它,但现在多人可以复制它。我已经设法进一步缩减了我自己的示例,现在只有一个测试文件,没有实际代码,并且在编译测试时我仍然得到错误。
-
Linux 也这样做了,添加了 Travis CI 构建结果的链接。不错。
-
@AmberBeriwal 显然 Travis CI 能够重现它。我在主要问题中放置了构建日志的链接。我们还有几个不同的工作环境在我的简化示例中重现它。
标签: java java-8 log4j2 java-annotations