奇怪的javadoc错误(使用jdk12)用于OSGi版本注释



随着从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
^

最新更新