JDK 11+和Javadoc


13
Exit code: 1 - javadoc: error - The code being documented uses packages in the unnamed module, but the packages defined in https://docs.oracle.com/en/java/javase/11/docs/api/ are in named modules.

有没有人能够使javadoc工作而不必将源版本更改为1.8(如其他论坛中所建议)?我使用的是JDK v11.0.5,问题仍然存在(JDK 12+也是如此)。

编辑:此错误源于maven,由maven-javadoc-plugin抛出。即使进行了<source>8</source>配置,我也无法使它适用于JDK 11+ 。



我认为这个问题需要更多细节。您使用Maven吗?您在项目中使用还是尝试使用模块?
–rü

@rü-您是对的,我已经更新了帖子,谢谢。是的,我正在使用具有多模块设置的Maven。
拉斐尔·伊巴斯科

Answers:


7

OpenJDK问题跟踪程序中建议的,可以通过在Javadoc插件上定义源来解决此问题

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <source>8</source>
    </configuration>
</plugin>

3
可能您没有完全阅读问题。OP已明确提及:Has anyone been able to make javadoc work without having to change the source version to 1.8
Arvind Kumar Avinash

1
这个对我有用。我使用:<configuration> <source> $ {java.version} </ source> </ configuration>,在属性中它是java11。出于某种原因,我只需要指定版本。
ranma2913

您如何在Gradle中做到这一点?
拉菲·哈查杜安

1

javadoc生成到您使用的包的链接,例如到中记录的类的链接.../javase/11/docs/api。当您的注释位于一个未命名的模块中时,目标则不是,而javadoc不能将这两者结合在一起。它产生一个package-list或一个element-list文件,因此您不能将未命名的模块(软件包)与已命名的模块混合使用。

我没有找到一种方法来限制javadoc试图产生的链接。因此您可能必须为自己的项目使用模块。这对我来说似乎很荒谬,只是为了使javadoc开心。我想这只是许多人坚持使用Java 8的原因之一。


0

自此以来,发生了重大的重大变化 Java 9,使用Doclet API

JEP 221:简化的Doclet API
的Doclet API用新的简化的代替了旧的Doclet API,该API可以利用其他现有的标准API。标准doclet已被重写为使用新的Doclet API

现有的API和旧的标准doclet可用,但是 尚未更新以支持新的语言功能,例如模块

旧的API正在使用 com.sun.javadoc

Doclet API(也称为Javadoc API)为客户端提供了一种机制,可以检查程序和库的源代码级结构,包括源代码中嵌入的javadoc注释。

您可以尝试使用新的Doclet API,请参见示例

public class BasicDoclet implements Doclet {
@Override
public void init(Locale locale, Reporter reporter) {  }
@Override
public String getName() {
    // For this doclet, the name of the doclet is just the
    // simple name of the class. The name may be used in
    // messages related to this doclet, such as in command-line
    // help when doclet-specific options are provided.
    return getClass().getSimpleName();
}

4
我可能是错的,但是我在这里无法真正找到解决方案的一部分。给定问题已读.. 有没有人能够使javadoc工作而不必将源版本更改为
1.8。– Naman

“现有的API和旧的标准doclet可用,但尚未更新以支持新的语言功能(例如模块)”,这是否意味着版本9及更高版本的javadoc被破坏了?另外,我的问题是maven从maven-javadoc-plugin报告此错误。我不确定您上面发布的代码有什么帮助。
拉斐尔·伊巴斯科

1
我不认为@RafaelIbasco正在编写doclet。这个答案似乎没有帮助。
–rü
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.