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] ^
私の POM では、Javadoc Maven プラグインは次のように構成されています。
<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>
(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 @packages
'/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.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 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.invoke(Method.java:491) でorg.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)、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) です。
Java 7 で動作していたときのように、ソースをビルドし、プロジェクトをインストールし、Javadoc JAR を 1 つのステップで生成する方法に関する回避策はありますか?
ベストアンサー1
最善の解決策は、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>