Maven-javadoc-plugin的“聚合”目标和阶段

时间:2016-05-16 00:06:39

标签: java maven maven-javadoc-plugin

我有一个多模块项目:

parent
  |____ module1
  |____ module2
  |____ module3

我想为所有模块生成聚合 Javadoc。这可以通过在parent的pom.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,效果很好!

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

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

但是,这是我的问题,似乎即使我使用 prepare-package 阶段,当package阶段运行module3时,也不会生成聚合的Javadoc {1}}神器!这就像是在所有子插件之后运行父插件时,即使它是使用应该在之前运行的阶段声明...

关于如何在package的{​​{1}}阶段之前为所有模块生成聚合Javadoc的任何想法,所以我可以包含那个Javadoc?

1 个答案:

答案 0 :(得分:0)

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

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

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

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