JavaDoc - 未声明的类型变量

时间:2015-01-29 06:18:34

标签: java maven java-8 javadoc

我认为每个必须使用Maven和Java8的人都知道这个错误,发布版本突然因JavaDoc中的拼写错误而失败。作为一家公司,我们决定让一些可怜的傻瓜(也就是我)全部工作。现在我遇到了以下“错误”:

[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.

我尝试将其清理一下,但总结一下:Project 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正在尝试为项目B生成JavaDoc时,这并不重要。)

到目前为止,我们在多个项目中都有这个错误,大约有1个项目。项目A(具有上面类型化方法/类的项目)通常是在一个完全不同的构建反应堆中,有时完全没有我们的控制权。

如何在错误中修复此错误?

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

2 个答案:

答案 0 :(得分:2)

我在使用中央版本时遇到了同样的错误消息,而我的本地版本没有任何问题。 (遗憾的是,我没有关于中央构建环境的详细信息。)

添加&#39; @param&#39; JavaDoc注释中有关静态方法的解释解决了这个问题。根据给定的例子我做了类似的事情:

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

答案 1 :(得分:0)

好的答案是a)将Java降级到1.8.0_20,或者 - 如果不可能 - b)在 pom.xml 中使用此代码来禁用项目的JavaDoc,直到Java人员认为需要修复错误:

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