Mavenを使用する場合に、より厳密なJava 8 Javadocを回避する方法


133

Javadocに関しては、JDK8の方が(デフォルトで)より厳密であることをすぐに理解できます。(リンク -最後の箇条書きを参照)

Javadocを生成しない場合は、もちろん問題は発生しませんが、MavenリリースプロセスやCIビルドなどの問題が発生し、JDK7で正常に機能した場合に突然失敗します。Javadocツールの終了値をチェックするものはすべて失敗するようになりました。JDK8のJavadocはwarnings、JDK7 に比べておそらくもっと冗長ですが、ここでは範囲を広げません。私たちは話しているerrors

この質問は、それについて何をすべきかについての提案を収集するために存在します。最善のアプローチは何ですか?これらのエラーはソースコードファイルで一度だけ修正する必要がありますか?巨大なコードベースがある場合、これは多くの作業になる可能性があります。他にどのようなオプションがありますか?

以前失敗したことのある、今失敗したことについてのコメントも歓迎します。

今失敗するもののホラーストーリー

wsimportツール

wsimportツールは、Webサービスコンシューマーを作成するためのコードジェネレーターです。JDKに含まれています。wsimportJDK8 のツールを使用しても、JDK8 のjavadocコンパイラでコンパイルできないソースコード生成されます。

@authorタグ

私は3〜4年前のソースコードファイルを開いて、次のように表示します。

/**
 * My very best class
 * @author John <john.doe@mine.com> 
 */

これは、<文字のために失敗します。厳密に言えばこれは正当化されますが、それほど寛容ではありません。

HTMLテーブル

JavadocのHTMLテーブル?次の有効なHTMLを検討してください。

/**
 *
 * <table>
 *   <tr>
 *      <td>Col1</td><td>Col2</td><td>Col3</td>
 *   </tr>
 * </table>
 */

これはエラーメッセージで失敗しますno summary or caption for table。簡単な修正の1つは、次のようにすることです。

/**
 *
 * <table summary="">
 *   <tr>
 *      <td>Col1</td><td>Col2</td><td>Col3</td>
 *   </tr>
 * </table>
 */

しかし、なぜこれがJavadocツールからの世界一のエラーでなければならないのですか?

より明白な理由で失敗するもの

  1. 無効なリンク、例えば {@link notexist}
  2. 不正なHTML、例えば always returns <code>true<code> if ...

更新

リンク:

Stephen Colebourneによる主題に関する優れたブログ


13
このブログは、これをオフにする方法を示しています。blog.joda.org
Himanshu Bhardwaj

1
を使用し-Xdoclintて、javacコンパイル中にドキュメントをチェックするように指示することもできます...
Holger

1
@HimanshuBhardwaj。Stephen Colebourneのブログにリンクしていただきありがとうございます。これまでにこのテーマについて読んだ最高の作品です!
peterh 2014年

さらに、「エラー」の1つにもエラーがあります。「>の使用法が不適切です-これは誤りです。「>」は、受け入れられない特定のシーケンス「]]>」を除いて、XMLでは完全に許容されます(1つ文字のエスケープする必要があります)。エスケープする必要があるのは '<'だけです。 '>'には便宜上ニーモニック(gt)がありますが、その使用は完全にオプションです。
StaxMan 2015年

HTML 5の代わりにHTML 4に準拠しているのは何だろうと思います。個人的には、単純なマークアップ言語のほうが、出力だけでなくソースコードも読まなければならないので、好みます。少なくとも私にとっては、HTMLの人間が読みやすいかどうかは議論の余地があります。
Daniel

回答:


56

今のところ、Mavenを使用するときにJava 8のより厳密なJavadocを回避する最も簡単な方法は、Javadocを非アクティブにすることです。

-Xdoclint:noneこのパラメーターはJava 8にのみ存在するため、このパラメーターを定義すると、他のJavaのビルドが中断されます。これを防ぐために、Java 8でのみアクティブになるプロファイルを作成して、Javaのバージョンに関係なくソリューションが機能することを確認できます。

<profiles>
    <profile>
        <id>disable-java8-doclint</id>
        <activation>
            <jdk>[1.8,)</jdk>
        </activation>
        <properties>
            <additionalparam>-Xdoclint:none</additionalparam>
        </properties>
    </profile>
</profiles>

それをPOMに追加するだけでよいのです。


maven-javadoc-plugin 3.0.0ユーザーの場合:

交換する

<additionalparam>-Xdoclint:none</additionalparam>

沿って

<doclint>none</doclint>

@banterCZ、ありがとう!


3
これを、私たちのほとんどが実装する最も可能性の高いソリューションとして受け入れます。私はその<activation>部分が好きです。しかし、DocLintをオフにするだけでなく、誰かがこれらの多くのソースファイルを調べ、開発者がエラーを修正するのに役立つツールを思い付くことを願っています。
peterh

デフォルトで同時にアクティブになる別のプロファイルに依存している場合(activeByDefault = trueを使用)、このソリューションの使用に注意してください。
mwhs 2016

1
@peterh:すべてを完全に文書化する意味はありません。つまり、無駄な複製作業です。明確なコード原則により、明白でないものとパブリックAPIのみを文書化することをお勧めします。
DanielHári2017

1
これは、maven-javadoc-pluginバージョン3.0.0では機能しません。-Xdoclint:noneを機能させるには、バージョン3.0.0-M1に戻す必要がありました。
Mehrad Sadegh

4
@MehradSadegh用のmaven-javadocによってプラグインのバージョン3.0.0は、単に置き換える<additionalparam>-Xdoclint:none</additionalparam>ことにより、<doclint>none</doclint>
banterCZ

53

Maven javadocプラグインを使用しているfailOnError場合は、オプションを使用して、htmlエラーが検出された場合にプラグインが停止しないようにすることができます。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <configuration>
    <failOnError>false</failOnError>
  </configuration>
</plugin>

または、次のようにして完全なhtmlオプションを完全に無効にすることができます。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
      <additionalparam>-Xdoclint:none</additionalparam>
    </configuration>
  </plugin>
</plugins>

詳細は情報


2
うーん。これらのソリューションの問題は、JDK8のJavadocでそれを考えた場合、エラーで失敗したくないのに対し、JDK7のJavadocでは失敗することです。このため、この-Xdoclintオプションが一番好きです。JDK7 Javadocで実行された場合、黙って無視されることを期待していますか?
peterh 2014年

2
Javaバージョンをキーとするmavenプロファイルを介してオプションを条件付きで適用できます…?
ドナルフェロー

14
いいえ、JDK7ではjavadoc:エラー-無効なフラグ:-Xdoclint:none(素敵なジョブOracle)で失敗します。
Giovanni Toraldo 14年

4

maven-javadoc-pluginのバージョン3.0.0以降、doclintは専用のXMLタグを介して構成されます

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
       <doclint>none</doclint>
    </configuration>
</plugin>

3

私は@ThiagoPorciúnculaの解決策が好きですが、私にとっては十分には行きませんでした。

私は通常additionalparam、プロファイルによってオーバーライドされていないjavadocプラグインセットをすでに持っています。このため、私はしなければなりませんでした:

  • 設定しdisableDoclint、デフォルトでは空にプロパティを。
  • java> = 8の場合、disableDoclintプロパティを-Xdoclint:none
  • 使用${disableDoclint} in theadditionalparam section of theのmaven-javadocによってPlugin`を。

これは冗長ですが、うまく機能するようです。

<properties>
    <!-- set empty property -->
    <disableDoclint></disableDoclint>
</properties>
<profiles>
    <profile>
        <id>disable-java8-doclint</id>
        <activation>
            <jdk>[1.8,)</jdk>
        </activation>
        <properties>
            <!-- set property if >= java 8 -->
            <disableDoclint>-Xdoclint:none</disableDoclint>
        </properties>
    </profile>
    ...
</profiles>

次に、下${disableDoclint}で、additionalparamすでに定義したセクションでオプションの変数を使用できます。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <showPackage>false</showPackage>
                <additionalparam>-tag inheritDoc:X ${disableDoclint}</additionalparam>
            </configuration>
        </execution>
    </executions>
    <configuration>
        <showPackage>false</showPackage>
        <bottom>This documentation content is licensed...</bottom>
        <additionalparam>-tag inheritDoc:X ${disableDoclint}</additionalparam>
    </configuration>
</plugin>

これはJava 8で動作しますが、Java 7では構文エラーを引き起こしません。


2

エラーのno summary or caption for table場合、を使用して<table summary="">も機能しなくなることに注意してください。その場合は<caption>、次のように要素をテーブルに追加します。

<table>
    <caption>Examples</caption>
    ...
</table>

これが誰かを助けることを願っています。これがわかるまで、少し時間がかかりました。


1
JDKのバージョンは何ですか?確かにこの<table summary="">トリックはJDK8でも動作します。(jdk1.8.0_201でテスト済み)
peterh

@peterh私はjdk 11を使用しました
Jeronimo Backes

1
これが最新の答えです。summary="..."属性は、HTML5(JDK 11 javadocのデフォルト出力)ではサポートされなくなりました。また、JDK 8でサポートされています
KAP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.