java - Java 10 中的 Gradle javadoc 任务失败

标签 java gradle javadoc java-10

当尝试在我的 gradle 构建中执行 javadoc 任务时,会打印出以下消息(以及我可以根据请求提供的堆栈跟踪):

javadoc: error - An internal exception has occurred. 
    (com.sun.tools.javac.code.ClassFinder$BadClassFile: bad class file: /home/vtcakavsmoace/IdeaProjects/DiscordSRV2-Core/build/classes/java/main/com/discordsrv/core/auth/PlayerUserAuthenticator$1$1.class
  bad enclosing class for com.discordsrv.core.auth.PlayerUserAuthenticator$1$1: com.discordsrv.core.auth.PlayerUserAuthenticator$1
  Please remove or make sure it appears in the correct subdirectory of the classpath.)
Please file a bug against the javadoc tool via the Java bug reporting page
(http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com)
for duplicates. Include error messages and the following diagnostic in your report. Thank you.
com.sun.tools.javac.code.ClassFinder$BadClassFile: bad class file: /home/vtcakavsmoace/IdeaProjects/DiscordSRV2-Core/build/classes/java/main/com/discordsrv/core/auth/PlayerUserAuthenticator$1$1.class
  bad enclosing class for com.discordsrv.core.auth.PlayerUserAuthenticator$1$1: com.discordsrv.core.auth.PlayerUserAuthenticator$1
  Please remove or make sure it appears in the correct subdirectory of the classpath.

javadoc 似乎正在尝试记录匿名内部类的匿名内部类。

在构建文件夹中进一步检查后,您可以看到该匿名类根本不存在:

build dir

这是文件中唯一包含匿名类的方法(为了清晰起见,进行了缩减):

public void doSomething() {
    map.forEach((key, value) -> key.doSomething(response -> {
            invokeWithCallback(value, var, new FutureCallback<Boolean>() {
                @Override
                public void onSuccess(final @Nullable Boolean result) {
                    ...
                    new Pair<Key, Value>() {
                        ...
                    }
                    ...
                }

                @Override
                public void onFailure(final @Nonnull Throwable t) {
                    ...
                }
            });
        }
    }));
}

我应该如何处理这个问题以确保 javadoc 任务能够完成?

编辑:

做了更多探索;删除内部匿名类允许 javadoc 任务完成,因此这个匿名实例似乎是问题所在。

最佳答案

解决方法:

声明一个内部类,在其中执行匿名实例化。这可以防止 javadoc 尝试解析不存在的类文件。问题的格式:

public void doSomething() {
    map.forEach((key, value) -> key.doSomething(response -> {
            invokeWithCallback(value, var, new MyCallback(...));
        }
    }));
}

private class MyCallback implements FutureCallback<Boolean> {

    ...

    @Override
    public void onSuccess(final @Nullable Boolean result) {
        ...
        new Pair<Key, Value>() {
            ...
        }
        ...
    }

    ...

}

话虽这么说,我很快就会向 java 提交更正式的错误报告。

关于java - Java 10 中的 Gradle javadoc 任务失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51867084/

相关文章:

gradle - 如何使用 Kotlin 在 Gradle 构建中设置 html5 javadoc 选项

java - Process Builder 使用 AppData 文件夹找不到指定的路径

Java - 在多个类中具有相同的引用

JavaMail 和 IP4 与 IP6

android - 使用Jenkins构建Gradle项目时出错

java - IntelliJ IDEA 中 "IntelliJ"、 "Maven"和 "Gradle"构建系统之间的区别?

android - 无法获取类型对象的未知属性 'anko_version'...?

java - Eclipse 基本方法文档未显示

java - MacOS 多线程问题?

java - 以编程方式运行标准 Doclet