web-dev-qa-db-ja.com

JavadocコメントでJDK10にリンクできない

Java 9から10にアップグレードした後、Javadocツールでドキュメントを生成するときにJDKへのリンクが機能しなくなります(たとえば、Java.util.Optionalをインポートするファイルの場合、{@link Optional}Optionalとしてレンダリングされますとして Optional ; @see@param@return、および通常Javadocリンクが表示される他の場所での同じ問題)。

単純なモジュール化されたプロジェクトがあり、Javadocプラグイン(コンパイラプラグインのsourceセクションで10に設定されたtargetおよびconfigurationオプション)でMavenを使用しています。私の理解では、デフォルトでは-link https://docs.Oracle.com/javase/10/docs/api/がJavadocツールに渡されます。また、Javadocツールが、外部ドキュメントを見つけるように指示されたURLにpackage-listというテキストファイルが存在することを期待していたことも、私の理解です。 Java 8 1つある 。 Java 9 1つある 。 Java 10 しない (404エラー)。どうやら、Javadocツールはモジュール化されたプロジェクトの場合、element-listではなくpackage-listという名前のテキストファイルを出力するようですが、 提供されていない (または Java 9 、ただし Java 11 )の早期アクセスビルドで使用できます。

オプションLink to JDK documentationを有効にしてIntelliJを介してJavadocを生成しても、同じ結果になります。 -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リンクはありません。

これはどのように機能するはずですか? Oracleは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>

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"
22
gdejohn

これには2つの部分があります。

  1. JDK 10では、モジュールのサポートを改善するために、ファイルの形式と名前が変更されました。新しい名前は「element-list」であり、形式の変更により、javadocツールは、API内に存在するモジュールとパッケージを認識できます。

  2. https://docs.Oracle.com/javase/10/docs/api/overview-summary.html に投稿されているAPIのコピーは、「element-list」ファイルをブロックしているようです、404を与えます。それは調査して修正する必要があります。

JDK 10 APIを指すには、JDK 10バージョンのjavadocを使用する必要があることに注意してください。ツールの最新バージョンは、element-list(モジュールに関するドキュメントの場合)とpackage-list(パッケージに関するドキュメント(つまり、モジュールなし)の場合)の両方を理解します。

13

当面の私の回避策は、Maven Javadocプラグインの offlineLinks オプション(Javadocツールの linkoffline オプションに対応)を使用して、javadoc.exeをローカルのpackage-listにポイントすることです。プラグインのconfigurationセクションに以下を追加しました:

<detectJavaApiLink>false</detectJavaApiLink>
<offlineLinks>
    <offlineLink>
        <url>https://docs.Oracle.com/javase/${maven.compiler.release}/docs/api/</url>
        <location>${project.basedir}</location>
    </offlineLink>
</offlineLinks>

また、<maven.compiler.release>10</maven.compiler.release>pom.xmlpropertiesセクションに追加して、urlの値に${maven.compiler.release}を使用できるようにしました。 (これにより、sourceおよびtargetコンパイラオプションは冗長になりますが、IntelliJはMavenプロジェクトをインポートするときにreleaseを理解していないようなので、そのままにしておきます。)

package-list(ファイル拡張子なし)という名前のテキストファイルを作成し、プロジェクトのルートディレクトリに配置しました(つまり、${project.basedir}を探すlocationpackage-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の関連ビット:

<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>
9
gdejohn

... Mavenコミッターはこちら。

マスターのMaven Javadocプラグインには適切なビットがすでに追加されていますが、Java 11のjavadoc(1)のバグのため、これは役に立ちません。参照 MJAVADOC -561 詳細について。破損したリンクはOracleでのみ修正できます。

編集:修正はOracleによってJava 11.0.2に予定されています。

6
Michael-O