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.

(他のフォーラムで提案されているように)ソースのバージョンを1.8に変更せずにjavadocを機能させることができた人はいますか?私はJDK v11.0.5を使用していますが、問題はまだ存在しています(JDK 12+でも)。

編集:このエラーはmavenから発生し、maven-javadoc-pluginによってスローされました。設定を行ってもJDK 11+で機能させることができませんでした<source>8</source>



この質問にはもう少し詳細が必要だと思います。mavenを使用しますか?プロジェクトでモジュールを使用したり使用したりしましたか?
–rü

@rü-そうです、ありがとう、投稿を更新しました。はい、私はマルチモジュール設定でMavenを使用しています。
Rafael Ibasco

回答:


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>を使用し、プロパティではjava 11を使用しています。何らかの理由でバージョンを指定する必要がありました。
ranma2913

Gradleでこれを行うにはどうすればよいですか?
ラフィハチャドウリアン

1

javadocは、使用するパッケージへのリンクを生成します.../javase/11/docs/api。コメントは名前のないモジュールにありますが、ターゲットはそうではなく、javadocはこれら2つを結合できません。package-listまたはelement-listファイルを生成するので、名前のないモジュール(パッケージ)と名前の付いたモジュールを混在させることはできません。

javadocが作成しようとするリンクを制限する方法が見つかりませんでした。したがって、独自のプロジェクトにはモジュールを使用する必要がある場合があります。これは、javadocを幸せにするために、私にはばかげているようです。これは、多くの人がJava 8にこだわる理由の1つにすぎないと思います。


0

かなりありました ドックレットAPIを使用するためのJava 9以降の変更

JEP 221:簡素化されたドックレットAPI
古いドックレットAPIを、他の標準の既存のAPIを利用する新しい簡素化されたAPIに置き換えます。標準ドックレットは、新しいドックレットAPIを使用するように書き直されました

既存のAPIと古い標準ドックレットは利用可能ですが、モジュールなどの新しい言語機能をサポートするように更新されていません

古いAPIはcom.sun.javadocパッケージを使用しています

ドックレットAPI(Javadoc APIとも呼ばれます)は、ソースに埋め込まれたjavadocコメントを含む、プログラムおよびライブラリのソースレベルの構造をクライアントが検査するためのメカニズムを提供します。

新しいドックレット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
私は間違っているかもしれませんが、ここで解決策を実際に理解することはできませんでした。既に読んだ質問を考えると、ソースのバージョンを1.8に変更しなくてもjavadocを機能させることができましたか
Naman

「既存のAPIと古い標準ドックレットは利用できますが、モジュールなどの新しい言語機能をサポートするように更新されていません」これは、バージョン9以降のjavadocが壊れていることを意味しますか?また、私の問題はmavenがmaven-javadoc-pluginからこのエラーを報告することです。上記のコードがどのように役立つかわかりません。
Rafael Ibasco

1
@RafaelIbascoがドックレットを書いていたとは思わない。この回答は役に立たないようです。
–rü
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.