随着从Java 11到Java 12的更改,我们现在在包含OSGi版本注释的软件包信息文件上生成Javadoc时看到一个奇怪的错误。
源代码为:
@Version("1.3.0")
package org.apache.jackrabbit.oak.commons;
import org.osgi.annotation.versioning.Version;
错误是:
[ERROR] C:projectsapacheoaktrunkoak-commonssrcmainjavaorgapachejackrabbitoakcommonspackage-info.java:17: error: unknown tag: Version
[ERROR] @Version("1.3.0")
[ERROR] ^
(请参阅详细信息和上下文(
这是Java 12中的回归,还是注释的使用方式或Javadoc的调用方式(通过maven(有问题?
可能是Javadoc的错误,因为Javadoc认为Java注解是Javadoc标签。
解决方法 1:禁用此 Javadoc 标记
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<tags>
<tag>
<name>Version</name>
<placement>X</placement>
</tag>
</tags>
</configuration>
</plugin>
解决方法 2:在每个注释前面添加一个空的 Javadoc 块
/** */@Version("1.3.0")
package org.apache.jackrabbit.oak.commons;
解决方法是升级到较新的 JDK 版本。
此问题会影响 JDK 12,JDK-8222091 已在 JDK 13 中修复:Javadoc 无法正确处理包信息.java上的包注释。
同样的问题也会影响 OpenJDK 11.0.17,因为引入 javadoc 回归的更改是向后移植的。它在 JDK 11.0.18 中已修复。(请参阅 https://bugs.openjdk.org/browse/JDK-8295850。
简化重现:
package p;
import static java.lang.annotation.ElementType.PACKAGE;
import java.lang.annotation.Target;
@Target(PACKAGE)
public @interface A {}
@A
package p;
$ javadoc package-info.java A.java
...
package-info.java:1: error: unknown tag: A
@A
^