JavaDoc - 未声明的类型变量

JavaDoc - Undeclared Type Variable

我想每个必须使用 Maven 和 Java8 的人都知道发布构建突然失败的错误 JavaDoc 中的拼写错误。作为一家公司,我们决定让一些可怜的傻瓜(又名我)解决所有这些问题。现在我坚持使用以下 "error":

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.10.1:javadoc (default-cli) on project org.acme.project.demo: An error has occurred in JavaDocs report generation:
[ERROR] Exit code: 1 - C:\jenkins\workspace\Project 2.0\org.acme.project.demo\src\main\java\org\acme\project\demo\SomeClass.java:36: error: cannot access OtherClass
[ERROR] import org.acme.project.OtherClass;
[ERROR] ^
[ERROR] bad class file: C:\jenkins\workspace\Project 2.0\org.acme.project\target\org.acme.project-2.0.0-SNAPSHOT-v20150128-1503.jar(org/acme/project/OtherClass.class)
[ERROR] undeclared type variable: N
[ERROR] Please remove or make sure it appears in the correct subdirectory of the classpath.

我试着稍微清理一下,但总结一下:项目 B 在尝试解析对项目 A 的方法调用时抛出异常(是的,在生成 JavaDoc 时!)。有问题的方法如下所示:

public static <N extends Bean> void hookContinousImageFunction(final OtherClass<N> dialog,
        final ImageGroup imageGroup, N model, final BiFunction<Image, N, ? extends Image> imageFunction) {
    final Image original = imageGroup.getImage();
    dialog.setOnCancelClick((notUsed) -> imageGroup.setImage(original));
    model.addPropertyChangeListener(new ContinousImageFunctionListener<>(dialog, imageGroup, imageFunction));
    dialog.setInitialModel(model);
}

它甚至没有 JavaDoc(当项目 A 的 JavaDoc 的生成已经完成并且 Maven 正在尝试生成 Java项目B的文档)。

截至目前,我们在多个项目中都存在此错误,大约五分之一。项目 A(具有类型化方法的项目 / class 像上面一样)通常在一个完全不同的项目中建造反应堆,有时完全超出我们的控制。

我如何在一个错误中修复这个错误?

(作为旁注,错误发生在 Jenkin 的 运行 Java 1.8.0_31 和 jdk1.8.0_40 或本地 1.8 .0_45, 1.8.0_60,但不是在本地使用 1.8.0_20,但是 JavaDoc 生成并不是那么可靠,所以我不能肯定地说它与 Java 版本有关。)

好的答案是 a) 将 Java 降级到 1.8.0_20,或者 - 如果不可能 - b) 在 pom.xml 禁用项目的 Java 文档,直到 Java 人觉得需要修复错误:

<properties>
    <maven.javadoc.skip>true</maven.javadoc.skip>
</properties>

我在使用中央构建时收到了相同类型的错误消息,而在我的本地构建中却没有任何问题。 (不幸的是,我没有关于中央构建环境的详细信息。)

在有问题的静态方法的 JavaDoc 注释中添加“@param”解释解决了这个问题。适应给定的例子我做了这样的事情:

/**
 * @param <N> This is the class that ...
 */
public static <N extends Bean> void hookContinuousImageFunction(...)