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



多年来,我一直在使用Maven Javadoc插件javadoc:jar目标,将许多Java工件发布到Nexus(Maven Central(。目前,我正在使用Maven 3.8.6和Java 17以及org.apache.maven.plugins:maven-javadoc-plugin:3.4.1

今天我正在阅读插件文档(文档中的重点(:

  • javadoc:jar:";使用标准Javadoc工具将NON聚合器项目main Java code的Javadoc文档绑定到一个jar中">
  • CCD_ 5:";使用标准Javadoc工具将聚合器项目中主Java code的Javadoc文档捆绑到一个jar中">
  • CCD_ 7:";使用标准Javadoc工具在聚合器项目中为Java code生成文档">

这让我有点困惑。当文档提到";聚合器项目";?它是否指的是使用聚合POM的项目,其中父POM列出了几个正在聚合的子项目POM?然而,为什么使用Maven Javadoc插件的目标会有所不同呢?

多年来,我在一个";根POM";我所有的项目。它使用javadoc:jar目标。它为继承自它的子项目设置插件配置。一些子项目是独立的单个POM项目。其中一些是聚合聚甲醛。我从来没有遇到过这样做的问题。

我应该在某些项目中使用javadoc:jar目标,而在其他项目中则使用javadoc:aggregate-jar目标吗?但是,根POM怎么可能知道子项目是否是一个聚合项目呢?如果我继续在所有事情上使用javadoc:jar目标,会有什么突破?

(作为奖励,这个单独的javadoc:aggregate-no-fork目标是什么?(

是的,"聚合器项目;指项目聚合。使用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] >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    ...
    [INFO] Building jar: /target/parent-0.0.0-SNAPSHOT-javadoc.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] Reactor Summary for parent 0.0.0-SNAPSHOT:
    [INFO] 
    [INFO] parent ............................................. SUCCESS [  2.971 s]
    [INFO] module1 ............................................ SKIPPED
    [INFO] module2 ............................................ SKIPPED
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    

    Javadoc只在父级/target/apidocs的一个位置创建,绑定到一个JAR中。

    模块跳过Javadoc插件,但父执行会创建分叉构建,为每个模块执行compile阶段,以确保Javadoc处理的所有输入都存在(即生成的源(。

  • 在父级上运行javadoc:aggregate-no-fork不会创建分叉构建,而是在生成Javadocs的每个模块上递归运行。。。

    [INFO] Building parent 0.0.0-SNAPSHOT                                     [1/3]
    ...
    [INFO] No previous run data found, generating javadoc.
    ...
    [INFO] Building module1 0.0.0-SNAPSHOT                                    [2/3]
    ...
    [INFO] No previous run data found, generating javadoc.
    ...
    [INFO] Building module2 0.0.0-SNAPSHOT                                    [3/3]
    ...
    [INFO] No previous run data found, generating javadoc.
    [INFO] ------------------------------------------------------------------------
    [INFO] Reactor Summary for parent 0.0.0-SNAPSHOT:
    [INFO] 
    [INFO] parent ............................................. SUCCESS [  1.909 s]
    [INFO] module1 ............................................ SUCCESS [  1.082 s]
    [INFO] module2 ............................................ SUCCESS [  0.991 s]
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    

    并且还将它们聚合到父母的CCD_ 24中。此命令用于已准备好所有源的CI环境。

    与前面的命令相比,没有创建JAR。

最新更新