多年来,我一直在使用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:jar
或javadoc: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。