私は大規模なマルチモジュールMavenビルドを持っています。すべてのモジュールのjavadocを生成し、ユーザが消費するためにボックスにデプロイできる「集約された」javadoc結果を生成する必要があります。javadocを再生成せずにmavenサブプロジェクトのjavadoc出力を集める方法
特定の機能と要件を持つカスタムタグレットを実装しようとするまで、これは完璧にうまく動作しました。
すべてのサブモジュールは、アグリゲーターpomではない親のpomを継承します。その親のpomでは、maven-javadoc-pluginを定義します。ただ、検証ステップとして、私は私が今知っている自分のJavadocを生成しますモジュール、(すべてのすべてを構築することができ、これにより
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
<bottom>Unified Service Layer - bottom</bottom>
<doctitle>Unified Service Layer - title</doctitle>
<footer>Unified Service Layer - footer</footer>
<groups></groups>
<header>Unified Service Layer - header</header>
<level>public</level>
<packagesheader>Unified Service Layer - packagesheader</packagesheader>
<top>Unified Server Layer - top</top>
<windowtitle>Unified Service Layer - windowtitle</windowtitle>
</configuration>
<executions>
<execution>
<id>module-javadoc-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<show>protected</show>
<detectLinks>false</detectLinks>
</configuration>
</execution>
<execution>
<id>aggregated-documentation</id>
<phase>package</phase>
<inherited>false</inherited>
<goals>
<goal>aggregate-jar</goal>
</goals>
<configuration>
<show>protected</show>
<detectLinks>false</detectLinks>
</configuration>
</execution>
</executions>
</plugin>
:これは、私がカスタムタグレットを追加する前のように見えたものですaggregate-jarはこの出力を使用しません)。私はJenkinsから別のステップを呼び出し、ルートプロジェクトで "javadoc:aggregate-jar"を実行します。これは、私がデプロイする集約されたjavadoc jarファイルを生成します。
これまでもこれまではうまくいきました。
カスタムjavadocタグレットを実装しました。このタグレットには、含まれているソースファイルに関連付けられたClassオブジェクトにアクセスする必要があります。私は、最小限のプラグインの設定を追加する必要がありました、クラスファイルへのアクセスを取得タグレット持つために
<taglets>
<taglet>
<tagletClass>com.att.det.taglet.ValidationConstraintsTaglet</tagletClass>
</taglet>
<taglet>
<tagletClass>com.att.det.taglet.ValidationConstraintsCombinedTaglet</tagletClass>
</taglet>
</taglets>
<tagletArtifacts>
<tagletArtifact>
<groupId>com.att.detsusl.taglets</groupId>
<artifactId>validationJavadocTaglet</artifactId>
<version>0.0.1-SNAPSHOT</version>
</tagletArtifact>
</tagletArtifacts>
:私は、個々のモジュールは、上記の構成に以下を追加することにより構築し、少なくともで、仕事にこれを得ましたこのようになり、各サブプロジェクトのpom.xmlに:これらの最小限の変更で
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<tagletArtifacts combine.children="append">
<tagletArtifact>
<groupId>com.att.detsusl</groupId>
<artifactId>artifact-name</artifactId>
<version>${current.pom.version}</version>
</tagletArtifact>
</tagletArtifacts>
</configuration>
</plugin>
、私はそれことを確認し、Javadocを生成し、各モジュールで生成されたJavadocの出力を調べて、各モジュールでビルドを実行することができすべて働いた。
しかし、問題は、ルートプロジェクトで "javadoc:aggregate-jar"を実行すると、すでにビルドされているすべての出力が無視されることです。すべてのサブプロジェクトのjavadoc生成を再実行し、各サブプロジェクトのpom.xmlファイルに追加されたtagletArtifactsリストも無視します。その結果、クラスファイルを取得しようとするとClassNotFoundエラーが発生します。
すべてのサブプロジェクトのGAVをトップレベルの "tagletArtifacts"リストに入れることでこれを "修正"できましたが、私は間違いなくそれをしたくありません。私はそれを機能させるために、サブプロジェクトpom.xml(combine.children = "append")でこれを指定する機能が好きでした。
私が必要とするのは、親のpomにすべてのサブプロジェクトについて知ってもらうことなく、タグファイルがクラスファイルにアクセスできる、すべてのサブプロジェクトの全体的なjavadocパッケージです。これどうやってするの?