Maven Javadoc插件javadoc:jar和javadoc:aggregate-jar之间的区别

3
我已经使用Maven Javadoc Plugin javadoc:jar 目标多年,将许多Java构件发布到了Nexus(Maven Central)。目前我正在使用Maven 3.8.6和Java 17,以及org.apache.maven.plugins:maven-javadoc-plugin:3.4.1
今天我在阅读插件文档(文档中加粗部分):
  • javadoc:jar:将非聚合项目中的主要Java代码的Javadoc文档打包成一个jar文件,使用标准的Javadoc工具。
  • javadoc:aggregate-jar:将聚合项目中的主要Java代码的Javadoc文档打包成一个jar文件,使用标准的Javadoc工具。
  • javadoc:aggregate-no-fork:使用标准的Javadoc工具为聚合项目中的Java代码生成文档。
这让我有些困惑。当文档提到“聚合项目”时,它指的是什么?它是指使用聚合 POM的项目,其中父 POM 列出了被聚合的多个子项目 POM 吗?但为什么使用哪个 Maven Javadoc 插件目标会有所区别呢?
多年来,我一直在为所有项目设置“根 POM”中的 Maven Javadoc 插件。它使用 javadoc:jar 目标。它为继承自它的子项目设置插件配置。其中一些子项目是独立的单 POM 项目。其中一些是聚合 POM。我从来没有用这种方式遇到过问题。
我应该为某些项目使用 javadoc:jar 目标,而对于其他项目使用 javadoc:aggregate-jar 吗?但是根 POM 怎么会知道子项目是否是聚合项目呢?如果我继续为所有东西使用 javadoc:jar 目标,会发生什么错误?
(作为奖励,什么是单独的 javadoc:aggregate-no-fork 目标?)
1个回答

1

是的,“聚合器项目”指的是项目聚合。使用javadoc:jarjavadoc:aggregate-jar会产生不同的输出:

  • 在父级上运行javadoc:jar会递归地执行所有模块,如输出所示:

    [INFO] Building parent 0.0.0-SNAPSHOT                                     [1/3]
    ...
    [INFO] Not executing Javadoc as the project is not a Java classpath-capable package
    ...
    [INFO] Building module1 0.0.0-SNAPSHOT                                    [2/3]
    ...
    [INFO] Building jar: /module1/target/module1-0.0.0-SNAPSHOT-javadoc.jar
    ...
    [INFO] Building module2 0.0.0-SNAPSHOT                                    [3/3]
    ...
    [INFO] Building jar: /module2/target/module2-0.0.0-SNAPSHOT-javadoc.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] Reactor Summary for parent 0.0.0-SNAPSHOT:
    [INFO] 
    [INFO] parent ............................................. SUCCESS [  0.942 s]
    [INFO] module1 ............................................ SUCCESS [  1.154 s]
    [INFO] module2 ............................................ SUCCESS [  1.126 s]
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    

    在每个模块的target文件夹中创建单独的Javadoc输出,并打包成单独的JAR文件。

    仅在父级上使用--non-recursive运行javadoc:jar将不会输出任何内容。

  • 另一方面,执行javadoc:aggregate-jar仅在父级上运行:

    [INFO] Building parent 0.0.0-SNAPSHOT                                     [1/3]
    ...
    [INFO] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    [INFO] Forking module1 0.0.0-SNAPSHOT
    [INFO] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ...
    [INFO] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    [INFO] Forking module2 0.0.0-SNAPSHOT
    [INFO] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&

哦,所以问题不在于项目是否是聚合项目,而在于插件是否创建单个聚合JAR或为每个项目创建多个JAR。我认为文档有点混乱,甚至可以说是误导性的。感谢您澄清了这一点!尽管javadoc:jar不适用于聚合项目,但由于我想要每个子项目的单独JAR,因此我将继续使用它。 - Garret Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接