无法在Javadoc注释中链接到JDK10

从Java 9升级到10后,使用Javadoc工具生成文档时,指向JDK的链接不再有效(例如,对于导入java.util.Optional的文件, {@link Optional}呈现为Optional而不是Optional ;同样的问题与@return see, @return @param@return以及其他任何你通常看到Javadoc链接的地方)。

我有一个简单的模块化项目,我正在使用Maven和Javadoc插件(在编译器插件的configuration部分中将sourcetarget选项设置为10 )。 我的理解是默认情况下它将-link https://docs.oracle.com/javase/10/docs/api/传递给Javadoc工具。 这也是我的理解,从历史上看,Javadoc工具期望一个名为package-list的文本文件出现在它被告知要查找外部文档的URL中。 Java 8 有一个 。 Java 9 有一个 。 Java 10 没有 (404错误)。 显然,Javadoc工具现在为模块化项目输出一个名为element-list而不是package-list的文本文件,但似乎也没有提供 (Java9也没有提供 ,但它可用于早期访问的Java构建11 )。

通过IntelliJ生成Javadoc,并启用了启用Link to JDK documentation的选项Link to JDK documentation可以产生相同的结果。 它说传递-link https://docs.oracle.com/javase/10/docs/api/javadoc.exe ,它报告javadoc: error - Error fetching URL: https://docs.oracle.com/javase/10/docs/api/ 。 尽管有错误,它确实输出了Javadoc,但与Maven一样,没有JDK链接。

这应该怎么样? 当他们将JDK文档放到网上时,Oracle是否搞砸了?

我的pom.xml的相关部分:

    org.apache.maven.plugins maven-compiler-plugin 3.7.0  10 10    org.ow2.asm asm 6.1      org.apache.maven.plugins maven-javadoc-plugin 3.0.0   attach-javadocs  jar       

输出mvn -version

 Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T12:49:05-07:00) Maven home: C:\Program Files\apache-maven-3.5.3\bin\.. Java version: 10, vendor: Oracle Corporation Java home: C:\Program Files\Java\jdk-10 Default locale: en_US, platform encoding: Cp1252 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows" 

这有两个部分。

  1. 在JDK 10中,文件的格式和名称已更改,以更好地支持模块。 新名称是“element-list”,格式的更改允许javadoc工具知道API中存在哪些模块以及哪些包。

  2. 在https://docs.oracle.com/javase/10/docs/api/overview-summary.html上发布的API副本似乎阻止了“元素列表”文件,给出了404.这需要被调查和修复。

请注意,您需要使用JDK 10版本的javadoc来指向JDK 10 API。 该工具的最新版本理解元素列表(关于模块的文档)和包列表(关于包的文档(即没有模块))。

我目前的解决方法是使用Maven Javadoc插件的linkoffline选项(与Javadoc工具的linkoffline选项相对应)将javadoc.exe指向本地package-list 。 我在插件的configuration部分添加了以下内容:

 false   https://docs.oracle.com/javase/${maven.compiler.release}/docs/api/ ${project.basedir}   

我将10到我的pom.xmlproperties部分,以便我可以在url的值中使用${maven.compiler.release} 。 (这使得sourcetarget编译器选项变得多余,但IntelliJ在导入Maven项目时似乎不理解release ,所以我保留了它们。)

我创建了一个名为package-list (没有文件扩展名)的文本文件,并将其放在项目的根目录中(因此${project.basedir}为该location ,它将查找package-list )。 那个文件看起来像这样:

 java.lang java.util java.util.concurrent java.util.function java.util.stream 

它只需要您尝试链接的包。 我还尝试命名文件element-list并遵循javadoc.exe用于模块化项目的格式,如下所示:

 module:java.base java.lang java.util java.util.concurrent java.util.function java.util.stream 

但这不起作用(Javadoc成功生成,但没有像以前那样的JDK链接)。 它抱怨它无法找到package-list

那么,再一次, pom.xml的相关部分:

  10  10  10  UTF-8     org.apache.maven.plugins maven-compiler-plugin 3.7.0   org.ow2.asm asm 6.1      org.apache.maven.plugins maven-javadoc-plugin 3.0.0  false   https://docs.oracle.com/javase/${maven.compiler.release}/docs/api/ ${project.basedir}      attach-javadocs  jar