我有一个庞大的多模块Maven构建版本。我需要为所有模块生成javadoc,并生成一个“聚集的”javadoc结果,我可以将其部署到一个框中供用户使用。如何在未重新生成javadoc的情况下聚合Maven子项目javadoc输出
我确实在这段时间内工作得非常好,直到我尝试实现具有特定功能和要求的自定义小标签,这使得这更加复杂。
所有子模块都继承了不是聚合器pom的父pom。在那个父pom中,我定义了maven-javadoc-plugin。这就是它看起来像之前我添加的自定义Taglet的:
<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>
有了这个,我可以建立所有所有的模块,这将产生自己的javadoc(我现在知道的只是一个验证步骤,如聚集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>
为了有Taglet的获取访问的类文件,我不得不添加一个最小的插件配置每个子项目的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中指定它(with combine.children =“append”)以使其工作。
我需要的是一个用于所有子项目的整体javadoc包,其中小标签能够访问类文件,而不会强制父pom知道其所有子项目。我怎样才能做到这一点?