web-dev-qa-db-ja.com

Javadocタグが不完全な場合、MavenはJava 8で機能しません

私はMavenを使用して以来、不完全なJavadocタグ(たとえば、欠落したパラメーター)を含む私のローカルリポジトリプロジェクトにビルドしてインストールすることができました。

しかし、私がJava 8(1.8.0-ea-b90)に移行して以来、Mavenはドキュメンテーションタグの欠如について絶対に厳しく、JavadocがないプロジェクトをビルドまたはインストールしようとするとJavadoc問題に関連するJavadocエラーをたくさん見せてくれます。 「完璧」私がコンパイルして私のローカルリポジトリにインストールしようとしているプロジェクトの中には、私が制御できないサードパーティのプロジェクトがあります。そのため、これらすべてのプロジェクトですべてのJavadocを修正するという回避策は、私のシナリオでは実現可能ではないようです。

これは、プロジェクトでmvn clean package installを実行したときに表示される出力のごく一部です。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.026s
[INFO] Finished at: Mon Apr 08 21:06:17 CEST 2013
[INFO] Final Memory: 27M/437M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-javadoc-plugin:2.9:jar (attach-javadocs) on project jpc: MavenReportException: Error while creating archive:
[ERROR] Exit code: 1 - /Users/sergioc/Documents/workspaces/heal/jpc/src/main/Java/org/jpc/engine/prolog/PrologDatabase.Java:10: error: @param name not found
[ERROR] * @param terms the terms to assert
[ERROR] ^
[ERROR] /Users/sergioc/Documents/workspaces/heal/jpc/src/main/Java/org/jpc/engine/prolog/PrologDatabase.Java:11: warning: no description for @return
[ERROR] * @return
[ERROR] ^

Javadoc Mavenプラグインは、私のPOMで次のように構成されています。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.9</version>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

前にも述べたように、Java 7に戻ってもすべて問題なく動作しています。おそらくこれは、MavenがJava 8で実行されていることに関連するバグですか? Java 8でどのように動作させることができますか(つまり、プロジェクトのJavadocをビルドしてそのコードをローカルリポジトリにインストールすることができます)。 OSXでMaven 3.0.3と3.0.5の両方でテストしました。

更新:

Javadocプラグインの設定を<failOnError>false</failOnError>で変更した場合(Martinに感謝):

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.9</version>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

それからプロジェクトは私のローカルリポジトリにインストールされます。ただし、Javadoc JARはまだ生成されていません。

この新しい設定でコンソールに表示される出力の一部は次のとおりです。

[エラー] MavenReportException:アーカイブ作成中のエラー:終了コード:1 - /Users/....Java:18:警告:no @param ...コマンドラインは/ Library/Java/Home/bin/javadoc @optionsです@パッケージ

/ Users/sergioc/Documents/workspaces/heal/minitoolbox/target/apidocsディレクトリにある生成されたJavadocファイルを参照してください。

org.Apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport(AbstractJavadocMojo.html)at org.Apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine(AbstractJavadocMojo.Java:5043) org.Apache.maven.lifecycle.internal.MojoExejoor.exeextorJava.orge(DefaultBuildPluginManager.Java:101).javadoc.JavadocJar.execute(JavadocJar.Java:181)(org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojoで) org.Apacheのorg.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:145)のorg.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:153)にあります。 org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:59)at ma.Apache.maven.lifecycle.internal.Lifecycle。maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:84) org.Apache.maven.lifecycle.internal.LifecycのsingleThreadedBuild(LifecycleStarter.Java:183) org.Apache.mavenのorg.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:320)のleStarter.execute(LifecycleStarter.Java:161)org.Apache.mavenのleStarter.execute(LifecycleStarter.Java:161) org.Apache.maven.cli.MavenCli.main(MavenCli.Java:141)のorg.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:196)の.cli.MavenCli.execute(MavenCli.Java:537) Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess.Java.html) Method.invoke(Method.Java:491)at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.Java:290)at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.Java: 230)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:409)at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:352)

Java 7で作業していたときに、ソースをビルドし、プロジェクトをインストールし、Javadoc JARを1ステップで生成する方法に関する回避策はありますか?

294
Sergio

最善の解決策は、javadocエラーを修正することです。何らかの理由でそれが不可能な場合(例:自動生成されたソースコード)、このチェックを無効にすることができます。

DocLintはJava 8 の新機能です。

開発サイクルの早い段階で、またソースコードに簡単にリンクできるように、Javadocコメント内のエラーを検出する手段を提供します。

これはデフォルトで有効になっており、Javadocを生成する前にたくさんのチェックを実行します。このスレッドで を指定して、Java 8ではこれをオフにする必要があります 。 Mavenの設定にこれを追加する必要があります。

<profiles>
  <profile>
    <id>Java8-doclint-disabled</id>
    <activation>
      <jdk>[1.8,)</jdk>
    </activation>
    <properties>
      <javadoc.opts>-Xdoclint:none</javadoc.opts>
    </properties>
  </profile>
</profiles>
<build>
  <plugins>
    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.9</version>
        <executions>
            <execution>
                <id>attach-javadocs</id>
                <goals>
                    <goal>jar</goal>
                </goals>
                <configuration>
                    <additionalparam>${javadoc.opts}</additionalparam>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <reportPlugins>
            <plugin>
              <groupId>org.Apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId>
              <configuration>
                <additionalparam>${javadoc.opts}</additionalparam>
              </configuration>
            </plugin>
          </reportPlugins>
        </configuration>
      </plugin>
   </plugins>
</build>

maven-javadoc-plugin 3.0.xの場合:置換

<additionalparam>-Xdoclint:none</additionalparam>

<doclint>none</doclint>
366
Subhas

Java 8とJava 7の両方でうまく動くようにする最も簡単な方法は、ビルドでプロファイルを使用することです。

<profiles>
  <profile>
    <id>doclint-Java8-disable</id>
    <activation>
      <jdk>[1.8,)</jdk>
    </activation>

    <build>
      <plugins>
        <plugin>
          <groupId>org.Apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <configuration>
            <additionalparam>-Xdoclint:none</additionalparam>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>
94
ankon

これは、使用されているJavaのバージョンに関係なく、doclintの警告を無視するための最も簡潔な方法です。わずかな変更を加えて、複数のプロファイルでプラグイン設定を複製する必要はありません。

<profiles>
  <profile>
    <id>doclint-Java8-disable</id>
    <activation>
      <jdk>[1.8,)</jdk>
    </activation>
    <properties>
      <javadoc.opts>-Xdoclint:none</javadoc.opts>
    </properties>
  </profile>
</profiles>

<build>
  <plugins>
    <plugin>
      <groupId>org.Apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
      <executions>
        <execution>
          <id>attach-javadocs</id> <!-- The actual id should be apparent from maven output -->
          <configuration>
            <additionalparam>${javadoc.opts}</additionalparam>
          </configuration>
        </execution>
      </executions>
    </plugin>
    ...
  </plugins>
</build>

Oracle/open jdk 6、7、8、11でテスト済み。

60
Oliver Gondža

Pomファイルのグローバルプロパティセクションに追加します。

<project>
    ...
    <properties>
        <additionalparam>-Xdoclint:none</additionalparam>
    </properties>

ここで他の回答で提供されている一般的な解決策(プラグインセクションにそのプロパティを追加する)は何らかの理由でうまくいきませんでした。グローバルに設定することによってのみ、javadoc jarを正常に構築できました。

38
zapp

どのJavaバージョンでも動作する最短の解決策:

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

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

これは基本的に @ ankonの答え@ zappの答え​​ です。


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

交換する

<additionalparam>-Xdoclint:none</additionalparam>

によって

<doclint>none</doclint>

35

maven-javadoc-plugin設定のみをオーバーライドしても、mvn siteの問題は解決されません(例えばリリース段階で使用されます)。これが私がしなければならなかったことです:

<profile>
  <id>doclint-Java8-disable</id>
  <activation>
    <jdk>[1.8,)</jdk>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <additionalparam>-Xdoclint:none</additionalparam>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <reportPlugins>
            <plugin>
              <groupId>org.Apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId>
              <configuration>
                <additionalparam>-Xdoclint:none</additionalparam>
              </configuration>
            </plugin>
          </reportPlugins>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>
30
Jakub Skoczen

DocLintをオフにするだけでは、少なくとも長期的には解決できないと思います。 Javadocがもう少し厳密になっているので、ビルド問題を解決する正しい方法は、根本的な問題を解決することです。はい、最終的にこれらのソースコードファイルを修正する必要があります。

これまで見逃していた可能性があることに注意する必要があります。

  • 不正なHTML(たとえば、終了タグの欠落、角かっこのエスケープなど)
  • {@link }sが無効です。 (@seeのような同様のタグにも同じことが言えます)
  • 無効な@author値です。これは以前は受け入れられていました:@author John <[email protected]>が、括弧がエスケープされていなかったために、もう受け入れられませんでした。
  • JavadocのHTMLテーブルは、要約またはキャプションを必要とします。説明は この質問 を参照してください。

ソースコードファイルを修正し、Javadocを失敗せずにビルドできるようになるまでビルドし続けるだけです。厄介ですが、個人的には、自分が作成したJavadocが実際に私が意図しているものであると自信が持てるようになるので、自分のプロジェクトをDocLintレベルに上げたときには好きです。

あなたが自分で作成していない何らかのソースコードでJavadocを生成している場合、もちろん問題はあります。 wsimport 。実際にJDK8をリリースする前に、OracleがJDK8準拠のための独自のツールを用意していなかったのは奇妙なことです。 と思われますが、Java 9 まで修正される予定はありません。この特定の場合に限り、このページの他の場所に記載されているようにDocLintをオフにすることをお勧めします。

28
peterh

failOnErrorプロパティ( プラグインのドキュメント を参照)をfalseに設定してみてください。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.9</version>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
              <failOnError>false</failOnError>
            </configuration>
        </execution>
    </executions>
</plugin>

ドキュメントからわかるように、デフォルト値はtrueです。

19
Martin Ellis

それはmavenコマンドを実行するために使用されるJREのバージョンに依存するので、あなたはおそらくあなたのpom.xmlのデフォルトでDocLintを無効にしたくないでしょう

したがって、コマンドラインからスイッチ-Dadditionalparam=-Xdoclint:noneを使用できます。

例:mvn clean install -Dadditionalparam=-Xdoclint:none

17
My-Name-Is

設定プロパティ名は、maven-javadoc-pluginの最新バージョン3.0.0で変更されました。

したがって、<additionalparam>は機能しません。そのため、以下のように修正する必要があります。

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

Maven-javadoc-plugin 3.0.0以降では、追加のJavadocオプションを設定するために additionalJOption を使用しているはずです。次のプロパティを追加する必要があります。

<properties>
    ...
    <additionalJOption>-Xdoclint:none</additionalJOption>
    ...
<properties>

また、maven-javadoc-pluginのバージョンを3.0.0以上としてください。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>3.0.0</version>    
</plugin>
3
amanzoor

ですから、私がしなかった時間を節約し、うまくいかないようでしたら試してみてください。

 <additionalJOption>-Xdoclint:none</additionalJOption>

タグは新しいバージョンに変更されています。

2
rawrintheclouds

他の答えに洞察を加えたい

私の場合

-Xdoclint:なし

うまくいきませんでした。

まず始めに、私のプロジェクトでは、javadocはまったく必要ありませんでした。必要なプラグインだけがビルド時に依存していました。

だから、私の問題を解決するための最も簡単な方法は次のとおりです。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
2
mpasko256

下記に追加

Java_TOOL_OPTIONS = -DadditionalJOption = -Xdoclint:なし

jenkinsジョブ設定>ビルド環境>ビルドプロセスへの環境変数の挿入>プロパティコンテンツ

Jenkins Mavenによるコード構築の問題を解決しました:-)

2
snj

これが助けになるかどうかはわかりませんが、私もごく最近oozie-4.2.0バージョンでまったく同じ問題に直面しました。上記の答えを読み終えた後、コマンドラインでMavenオプションを追加しました。それで、ここで共有するだけです。

私はJava1.8.0_77を使っていますが、Java 1.7では試していません

bin/mkdistro.sh -DskipTests - Dmaven.javadoc.opts = ' - Xdoclint:-html'

2
Raghu Kumar

不足している@paramタグおよび@returnタグを無視するには、missingdoclintグループ を無効にするだけで十分です。このようにして、Javadocはまだより高いレベルと構文の問題がないかチェックされます。

    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
            <doclint>all,-missing</doclint>
        </configuration>
    </plugin>

これはプラグインバージョン3.0以降用です。

1
gjoranv

私はパーティーに少し遅刻しました、しかし私も回避策を探すことを余儀なくされ、ここで終わり、そしてそれを見つけました。

これは私のために働くものです: -

export Java_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

それからMavenのビルド、Linuxディストリビューションのビルドなどを始めましょう。Mavenconfigファイルの修正は必要ないというのはいいことです。たくさんのCentosrpmパッケージを再構築するために、本当に深くしなければなりませんでした。

0
Mariusz Borsa