334

私は 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 に戻せばすべて正常に動作します。これは、Java 8 で実行されている Maven に関連するバグでしょうか? Java 8 でそれを機能させるにはどうすればよいでしょうか (つまり、プロジェクトの Javadoc をビルドし、そのコードをローカル リポジトリにインストールすることができます)。OSX で Maven 3.0.3 と 3.0.5 の両方をテストしました。

アップデート:

Javadoc プラグインの設定を次のように変更すると<failOnError>false</failOnError>(thanks 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: 警告: @param がありません ... コマンド ライン: /Library/Java/Home/bin/javadoc @options @パッケージ

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

org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeJavadocCommandLine(AbstractJavadocMojo.java:5043) で org.apache.maven.plugin.javadoc.AbstractJavadocMojo.executeReport(AbstractJavadocMojo.java:1990) で org.apache.maven.plugin .javadoc.JavadocJar.execute(JavadocJar.java:181) org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java) :209) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) で org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) で org.apache. org.apache.maven.lifecycle.internal.LifecycleModuleBuilder の maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)。org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) の buildProject(LifecycleModuleBuilder.java:59) org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) のorg.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) で org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) で org.apache.maven.cli.MavenCli.execute(MavenCli.java) :537) org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) で org.apache.maven.cli.MavenCli.main(MavenCli.java:141) で sun.reflect.NativeMethodAccessorImpl.invoke0( Native Method) で sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で java.lang.reflect.Method で。org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) の invoke(Method.java:491) org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) のorg.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:409) で org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:352) で

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

4

18 に答える 18

411

最善の解決策は、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.0+ の場合: 置換

<additionalparam>-Xdoclint:none</additionalparam>

<doclint>none</doclint>
于 2013-05-24T20:28:39.100 に答える
66

これは、使用されている 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 でテスト済み。

于 2014-11-07T16:50:54.023 に答える
44

任意の 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>

于 2016-01-04T12:46:43.133 に答える
25

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.

于 2013-05-22T20:07:53.140 に答える
18

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

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

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

于 2016-05-03T15:36:39.293 に答える
4

maven-javadoc-plugin 3.0.0 の時点では、 additionalJOptionを使用して追加の Javadoc オプションを設定する必要があったため、Javadoc で doclint を無効にする場合は、次のプロパティを追加する必要があります。

<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>
于 2018-01-31T14:54:46.377 に答える
3

以下に追加

JAVA_TOOL_OPTIONS=-DadditionalJOption=-Xdoclint:none

ジェンキンスの仕事に:

構成 > ビルド環境 > ビルド プロセスに環境変数を挿入 > プロパティ コンテンツ

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

于 2018-02-15T00:46:15.420 に答える
2

これが役立つかどうかはわかりませんが、最近、 oozie-4.2.0バージョンでまったく同じ問題に直面しました。上記の回答を読んだ後、コマンドラインからmavenオプションを追加したところ、うまくいきました。だから、ここで共有するだけです。

私は Java 1.8.0_77を使用していますが、Java 1.7 は試していません。

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

于 2016-04-03T02:58:50.800 に答える