我们大约一周前开始在测试中遇到此错误。它一直在打开和关闭 - 有时人们会得到它,而有时他们不会。
/.../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
。(
我最终对log4j提交了票,弄清楚即使是Javac中的错误,Oracle也永远不会修复我们无论如何都会报告的关键错误。
显然是log4j的自定义注释处理以某种方式引起了问题 - 在那里的评论建议将 -proc:none
添加到Javac命令行中以关闭所有注释处理处理,实际上,随着注释处理关闭,编译现在可以工作!
正是为什么其注释处理器导致这仍然是一个谜。我阅读了代码,但似乎没有修改任何现有类。
根据doclint openjdk源代码,此消息与" dc.invalid.throws"属性关联,并且如果您使用@throws tag,则该属性消息作为错误输出使用非检查类型,或者如果您在构造函数或方法以外的其他内容上使用它。
这些似乎都不适用于您的情况。但是,我已经看到一些人抱怨他们会以不一致的构建收到此消息 - 响应通常是进行完整的重建。
例如。与同一错误消息有关的Lucene Jira,响应是:
通常会发生这些错误(尤其是在Solr的构建中( 是否在输出文件夹附近仍然存在过时的类文件,或者 以前的编译运行失败。
我在没有log4j的情况下重复了此问题。该项目位于https://github.com/rgoers/log4j2-1925。据我所知,任何注释处理器都会发生。
此错误已在http://bugs.java.com/bugdatabase/view_bug.do?bug_id=jdk-8186647。