Can';t在Javadoc注释中链接到JDK10

Can';t在Javadoc注释中链接到JDK10,java,maven,javadoc,maven-javadoc-plugin,java-10,Java,Maven,Javadoc,Maven Javadoc Plugin,Java 10,从Java9升级到10后,使用Javadoc工具生成文档时,指向JDK的链接不再有效(例如,对于导入Java.util.Optional,{@link Optional}的文件呈现为可选而不是as;与@see、@param、@return,以及您通常看到的Javadoc链接的任何其他地方相同) 我有一个简单的模块化项目,我将Maven与Javadoc插件一起使用(source和target选项在编译器插件的configuration部分设置为10)。我的理解是,默认情况下,它通过-linkhtt

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

我有一个简单的模块化项目,我将Maven与Javadoc插件一起使用(
source
target
选项在编译器插件的
configuration
部分设置为
10
)。我的理解是,默认情况下,它通过
-linkhttps://docs.oracle.com/javase/10/docs/api/
到Javadoc工具。我的理解是,从历史上看,Javadoc工具希望一个名为
package list
的文本文件出现在它被告知查找外部文档的URL上。爪哇8。爪哇9。Java10(404错误)。显然,Javadoc工具现在为模块化项目输出一个名为
元素列表
的文本文件,而不是
包列表
,但它似乎不是这样(也不是,但它可用于的早期访问构建)

通过IntelliJ生成Javadoc,并启用选项
链接到JDK文档
,会产生相同的结果。它说它正在传递
-linkhttps://docs.oracle.com/javase/10/docs/api/
javadoc.exe
,它报告
javadoc:error-获取URL时出错:https://docs.oracle.com/javase/10/docs/api/
。尽管出现了错误,它还是输出了Javadoc,但与Maven一样,没有JDK链接

这是怎么回事?Oracle把JDK文档放到网上的时候搞砸了吗

my
pom.xml的相关位:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>10</source>
                <target>10</target>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1</version> <!--update dependency for Java 10 compatibility-->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<properties>
    <maven.compiler.release>10</maven.compiler.release> <!--release makes source and target-->
    <maven.compiler.source>10</maven.compiler.source> <!--redundant, but IntelliJ doesn't-->
    <maven.compiler.target>10</maven.compiler.target> <!--use release when importing-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1</version> <!--update dependency for Java 10 compatibility-->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <detectJavaApiLink>false</detectJavaApiLink>
                <offlineLinks>
                    <offlineLink>
                        <url>https://docs.oracle.com/javase/${maven.compiler.release}/docs/api/</url>
                        <location>${project.basedir}</location>
                    </offlineLink>
                </offlineLinks>
            </configuration>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
</build>

目前我的解决方法是使用Maven javadoc插件的选项(对应于javadoc工具的选项)将
javadoc.exe
指向本地
包列表
。我在插件的
配置
部分添加了以下内容:

<detectJavaApiLink>false</detectJavaApiLink>
<offlineLinks>
    <offlineLink>
        <url>https://docs.oracle.com/javase/${maven.compiler.release}/docs/api/</url>
        <location>${project.basedir}</location>
    </offlineLink>
</offlineLinks>
它只需要您尝试链接到的包。我还尝试命名文件
元素列表
,并遵循
javadoc.exe
用于模块化项目的格式,如下所示:

module:java.base
java.lang
java.util
java.util.concurrent
java.util.function
java.util.stream
但这并没有起作用(Javadoc成功生成,但没有JDK链接,就像以前一样)。它抱怨说它找不到
包列表

因此,
pom.xml
的相关位再次:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>10</source>
                <target>10</target>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1</version> <!--update dependency for Java 10 compatibility-->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<properties>
    <maven.compiler.release>10</maven.compiler.release> <!--release makes source and target-->
    <maven.compiler.source>10</maven.compiler.source> <!--redundant, but IntelliJ doesn't-->
    <maven.compiler.target>10</maven.compiler.target> <!--use release when importing-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1</version> <!--update dependency for Java 10 compatibility-->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <detectJavaApiLink>false</detectJavaApiLink>
                <offlineLinks>
                    <offlineLink>
                        <url>https://docs.oracle.com/javase/${maven.compiler.release}/docs/api/</url>
                        <location>${project.basedir}</location>
                    </offlineLink>
                </offlineLinks>
            </configuration>
            <executions>
                <execution>
                    <id>attach-javadocs</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
</build>

10
10
10
UTF-8
org.apache.maven.plugins
maven编译器插件
3.7.0
org.ow2.asm
asm
6.1
org.apache.maven.plugins
maven javadoc插件
3.0.0
假的
https://docs.oracle.com/javase/${maven.compiler.release}/docs/api/
${project.basedir}
附加javadocs
罐子

这有两个部分

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

  • 发布于的API副本似乎阻止了“元素列表”文件,给出了404。这需要调查和解决


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

    …这里是Maven提交者

    master中的Maven Javadoc插件已经添加了适当的位,但由于java11中的
    Javadoc(1)
    中有一个bug,这不会有帮助。有关详细信息,请参阅。断开的链接只能由Oracle修复


    编辑:Oracle为Java 11.0.2计划了修复程序。

    @JacobG。文档本身就存在并且工作正常。当尝试使用Javadoc标记链接到它们时,会出现问题。三天前发布Java 10时,文档从移动到。@nullpointer
    mvn clean test Javadoc:Javadoc
    (我有一些JUnit 5测试,我使用的是Maven Surefire插件的2.19.1版)。没有例外,构建成功
    mvn clean package
    对我来说也不错。我已将
    mvn-version
    的输出添加到问题的底部。@gdejohn我可能遇到了另一个后续错误场景,该场景已在3.0.1中修复。但我同意,与Java-9相比,文档链接的生成似乎是中断的。也同意这样一点,即使是我用来测试前面链接的问题的maven javadoc插件的最新
    3.0.1-SNAPSHOT
    ,也不包含10年的
    包列表。我的一些本能只是不断地投入,并指出可能影响插件的方向。。。我的理解是,默认情况下,它会将-link传递给Javadoc工具。我的理解是,在过去,Javadoc工具希望在URL中出现一个名为package list的文本文件,在URL中它被告知查找外部文档。。。。请注意Java10中的一个变化,我同时也建议将其提高到,这样他们可以进一步提高到JDK,了解Java10中缺少包列表的原因,或者,如果计划从JDK版本中进行更改,则提供另一种解决方案