約 1 週間前にテストでこのエラーが発生し始めました。それはオンとオフを繰り返してきました。
/.../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);
}
}
}
Javadoc を個別に実行せずに Javadoc エラーについて調べたいので、コンパイル中に doclint をオンにします。
このエラーは正確には何を意味するのでしょうか? ここで行っていることについて何か無効なことはありますか? コンパイラのバグを調べていますか? 確かに、このようなバグは、メソッドが例外をスローすると宣言しようとした最初の人を襲うでしょう... :(
ここまでの捜査...
- この例を、同じエラーが発生する単純なプロジェクトに切り詰めることができました。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
ました。)