0

我有一个多模块项目:

parent
  |____ module1
  |____ module2
  |____ module3

我想为所有模块生成聚合的 Javadoc。这可以通过在parentpom.xml 中使用类似的东西来工作(它有一个pom包装并定义了子模块):

//...
<modules>
    <module>module1</module>
    <module>module2</module>
    <module>module3</module>
</modules>
//...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.10.3</version>
            <executions>
                <execution>
                    <id>aggregate</id>
                    <goals>
                        <goal>aggregate</goal>
                    </goals>
                    <phase>prepare-package</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

正确生成了聚合的 Javadoc,效果很好!

但问题是我需要将生成的聚合 Javadoc 包含在module3最终的 .jar中!换句话说,我希望结果module3.jar包含生成的所有模块的聚合 Javadoc 的副本!

这就是为什么我尝试在项目的准备包阶段运行maven-javadoc-plugin插件的原因:我希望在打包完成之前生成 Javadoc ,所以我可以包含它(例如,通过使用插件复制它) .parentmodule3maven-antrun-plugin

但是,这是我的问题,似乎即使我使用准备包阶段,当为工件package运行阶段时,还没有生成聚合的 Javadoc !module3就像父插件在所有子插件之后运行一样,即使它是使用应该在之前运行的阶段声明的...

关于如何在阶段之前为所有模块生成聚合 Javadoc 的任何想法,以便我可以包含该 Javadoc?packagemodule3

4

1 回答 1

0

我希望有人找到更好的解决方案,但如果有一天它可以帮助某人,这是我所做的解决方法:

我不让 Maven 自己生成聚合的 Javadoc。我通过将maven-javadoc-plugin插件包装在<profile>. 我给了我一个“aggregatedJavadoc” id。

然后,在 module3 中pom.xml,我添加了一个exec-maven-plugin插件,最终以编程方式调用aggregate目标,在父模块的“aggregatedJavadoc”配置文件中,在prepare-package阶段!然后我将生成的 Javadoc 复制到module3模块的构建输出文件夹中,因此它包含在生成的 .jar 中。

插件调用的脚本exec-maven-plugin在我的例子中是自定义的,但是可以使用许多解决方案以编程方式调用目标 Maven 目标:例如Apache Maven Invoker

于 2016-05-16T17:51:00.503 回答