无法在Javadoc注释中链接到JDK10
从Java 9升级到10后,使用Javadoc工具生成文档时,指向JDK的链接不再有效(例如,对于导入java.util.Optional
的文件, {@link Optional}
呈现为Optional
而不是Optional
;同样的问题与@return
see, @return
@param
, @return
以及其他任何你通常看到Javadoc链接的地方)。
我有一个简单的模块化项目,我正在使用Maven和Javadoc插件(在编译器插件的configuration
部分中将source
和target
选项设置为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"
这有两个部分。
-
在JDK 10中,文件的格式和名称已更改,以更好地支持模块。 新名称是“element-list”,格式的更改允许javadoc工具知道API中存在哪些模块以及哪些包。
-
在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}
我将
到我的pom.xml
的properties
部分,以便我可以在url
的值中使用${maven.compiler.release}
。 (这使得source
和target
编译器选项变得多余,但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