我有一个更大的多模块Maven构建。我需要为所有模块生成javadoc,并生成一个“聚合”的javadoc结果,我可以将其部署到一个框中供用户使用。
在我尝试实现一个具有特定特性和需求的定制小标签之前,我已经有很长一段时间可以很好地完成这项工作了,这使得这项工作变得更加复杂。
所有子模块继承的父pom不是聚合器pom。在父pom中,我定义了maven javadoc插件。这是我添加自定义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标记,它需要访问与它所包含的源文件相关联的类对象。通过在上述配置中添加以下内容,我至少在单个模块构建中实现了这一点:
<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中附加的tagletArtifacts列表。xml文件。因此,当它尝试获取类文件时,我得到了ClassNotFound错误。
我可以通过将所有子项目GAVs放入顶级“tagletarti事”列表来“修复”它,但我绝对不想这样做。我喜欢在子项目pom.xml(使用combine.children=“append”)中指定它以使其工作的能力。
我需要的是所有子项目的整体javadoc包,标签能够访问类文件,而无需强制父pom知道其所有子项目。我该怎么做?
我在所有的总目标上都面临着同样的问题。我检查了maven javadoc plugin的源代码,结果表明聚合是通过遍历子模块和收集源文件来完成的,因此完全忽略了子模块中指定的任何表单配置。
在执行过程中,每个子模块都被完全忽略:source
if ( isAggregator() && !project.isExecutionRoot() ) {
return;
}
在收集源文件的过程中,遍历子模块:source
if ( isAggregator() && project.isExecutionRoot() ) {
for ( MavenProject subProject : reactorProjects ) {
if ( subProject != project ) {
List<String> sourceRoots = getProjectSourceRoots( subProject );
所以目前,没有办法做到这一点。
这也不容易修复,因为整个插件都是通过对实际的javadoc工具进行一次调用来实现的。如果您还想尊重子模块中的设置,则必须合并它们的配置块。虽然这在使用标记工件(tagletArtifacts)的情况下有效,但它并不适用于您可以指定的所有设置,例如任何形式的过滤器,因此无法以通用方式完成。
我试图编译JavaDocs,使用: 我不断出现以下错误: 和 显然,我对多模块/聚合项目的依赖性没有得到认可。在我的一个模块pom中,这两个都标记为依赖项。xml文件。我需要在父pom中为maven javadoc plugin提供额外的参数吗。xml? 编辑: 我运行了mvn安装,它似乎可以工作。我的父母是pom。xml是: 这个版本已经过时了,但这似乎不是问题。
我有一个使用Maven构建的多模块java项目,我想使用生成javadocs。项目结构如下所示: 我也在使用Project Lombok在项目中生成一些方法。我已经通过首先使用Lombok maven插件运行delombok成功地将其配置为与单个模块一起使用。对于单个模块(lomboklib),这将在 然后由maven-javadoc-plugin和javadoc工具处理。这最初是在这个SO问题中
问题内容: 如果我用javadoc 编写,它不会出现,因为标签在格式化文本方面具有特殊功能。 如何在Javadoc中显示此字符? 问题答案: 您可以使用为 < 和为 > 。
在我的maven pom中,我还定义了javadoc插件,如下所示: 现在我在运行过程中得到了一些奇怪的输出 [信息]生成“Javadoc”报告--maven-javadoc-plugin:3.1.0:aggregate-no-fork[ERROR]错误提取链接:d:\work\eclipse\java\fritzbox\phplib\target\javadoc-bundle-options。忽
我们使用自定义doclet从自定义javadoc标记生成报告,并使用Maven站点插件和javadoc插件生成此报告和常规java API文档。 POM的部分如下所示: 在Maven 2下,这可以正常工作,但在Maven 3中只生成一个报告,这是POM中指定的最后一个报告(通过交换元素来分配)。 经过一些实验,我发现如果我将常规报告的目标从“javadoc”更改为“test javadoc”,那么
编辑:我修好了。首先我删除了模块文件,然后创建了Javadoc。在完成这些操作之后,我再次配置了我的模块文件,并且它运行了错误的屏幕截图