为多模块项目生成 Javadoc
Generate Javadoc for multimodule project
我已经阅读了我能找到的关于解决这个问题的所有内容,但我的尝试仍然失败。我能做的最好的事情就是只显示一个模块的 Javadoc——最后一个构建的模块。 (目前,我没有尝试将 Javadoc 捆绑到任何 JAR 中。我也没有尝试做任何事情 "site"。)我只是想将 Javadoc 放入项目根目录下的子目录中以便于访问。
这是我的 parent pom.xml:
<build>
<plugins>
.
.
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<noqualifier>all</noqualifier>
<reportOutputDirectory>${user.dir}/documents</reportOutputDirectory>
<destDir>javadoc</destDir>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
我放入下属 pom.xml 文件的内容与上述相同,除了
<goals>
<goal>javadoc</goal>
</goals>
我尝试用 parent 和有时下属的 pom.xml 文件替换 <execution>
为:
<execution>
<id>aggregate</id>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
但这没有什么区别。
我认为以下配置是您的报告被覆盖的原因:
<configuration>
<reportOutputDirectory>${user.dir}/documents</reportOutputDirectory>
</configuration>
所有模块构建都将写入同一目录,因此会覆盖之前的构建。
解决方法是使用默认输出目录,改为配置聚合javadoc的输出目录。这样,reactor 构建将在每个模块的目标目录中创建 javadoc 输出文件。然后这些可以被聚合目标使用。
这可以通过如下配置您的父 POM 来完成:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<!-- Default configuration for all reports -->
<noqualifier>all</noqualifier>
<destDir>javadoc</destDir>
</configuration>
<executions>
<execution>
<id>aggregate</id>
<goals>
<goal>aggregate</goal>
</goals>
<configuration>
<!-- Specific configuration for the aggregate report -->
<reportOutputDirectory>${user.dir}/documents</reportOutputDirectory>
<destDir>javadoc</destDir>
</configuration>
</execution>
...
</executions>
</plugin>
...
</plugins>
</build>
(无需在模块POM文件中进行任何额外配置)
现在可以通过 运行
创建聚合的 javadoc
mvn compile javadoc:javadoc javadoc:aggregate
(注意reactor需要compile或package goal来解决模块间依赖)
我已经阅读了我能找到的关于解决这个问题的所有内容,但我的尝试仍然失败。我能做的最好的事情就是只显示一个模块的 Javadoc——最后一个构建的模块。 (目前,我没有尝试将 Javadoc 捆绑到任何 JAR 中。我也没有尝试做任何事情 "site"。)我只是想将 Javadoc 放入项目根目录下的子目录中以便于访问。
这是我的 parent pom.xml:
<build>
<plugins>
.
.
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<noqualifier>all</noqualifier>
<reportOutputDirectory>${user.dir}/documents</reportOutputDirectory>
<destDir>javadoc</destDir>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
我放入下属 pom.xml 文件的内容与上述相同,除了
<goals>
<goal>javadoc</goal>
</goals>
我尝试用 parent 和有时下属的 pom.xml 文件替换 <execution>
为:
<execution>
<id>aggregate</id>
<goals>
<goal>aggregate</goal>
</goals>
</execution>
但这没有什么区别。
我认为以下配置是您的报告被覆盖的原因:
<configuration>
<reportOutputDirectory>${user.dir}/documents</reportOutputDirectory>
</configuration>
所有模块构建都将写入同一目录,因此会覆盖之前的构建。
解决方法是使用默认输出目录,改为配置聚合javadoc的输出目录。这样,reactor 构建将在每个模块的目标目录中创建 javadoc 输出文件。然后这些可以被聚合目标使用。
这可以通过如下配置您的父 POM 来完成:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<!-- Default configuration for all reports -->
<noqualifier>all</noqualifier>
<destDir>javadoc</destDir>
</configuration>
<executions>
<execution>
<id>aggregate</id>
<goals>
<goal>aggregate</goal>
</goals>
<configuration>
<!-- Specific configuration for the aggregate report -->
<reportOutputDirectory>${user.dir}/documents</reportOutputDirectory>
<destDir>javadoc</destDir>
</configuration>
</execution>
...
</executions>
</plugin>
...
</plugins>
</build>
(无需在模块POM文件中进行任何额外配置)
现在可以通过 运行
创建聚合的 javadocmvn compile javadoc:javadoc javadoc:aggregate
(注意reactor需要compile或package goal来解决模块间依赖)