如何通过Maven为API模块的Javadoc实现Shade与重定位?
实现Javadoc的包重定位方案
方法1:自定义Doclet配合maven-javadoc-plugin
maven-javadoc-plugin本身不带包重定位功能,但可以通过自定义Doclet实现包名批量替换:
- 编写自定义Doclet类,在处理类文档、方法引用时,将原引擎的包名替换为重定位后的子包名(比如把
com.original.engine替换为com.yourgame.engine) - 在pom.xml中配置maven-javadoc-plugin使用该自定义Doclet,示例配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.6.3</version> <configuration> <doclet>com.yourgame.doclet.RelocatingDoclet</doclet> <docletArtifact> <groupId>com.yourgame</groupId> <artifactId>your-custom-doclet</artifactId> <version>1.0.0</version> </docletArtifact> <additionalparam>-oldPackage com.original.engine -newPackage com.yourgame.engine</additionalparam> </configuration> </plugin>
方法2:先Shade代码再生成Javadoc
利用maven-shade-plugin先完成代码重定位,再基于重定位后的代码生成Javadoc:
- 配置maven-shade-plugin的relocation规则,将原引擎包映射到目标子包:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <relocations> <relocation> <pattern>com.original.engine</pattern> <shadedPattern>com.yourgame.engine</shadedPattern> </relocation> <relocation> <pattern>com.original.engine.api</pattern> <shadedPattern>com.yourgame.api</shadedPattern> </relocation> </relocations> </configuration> </execution> </executions> </plugin>
- 执行
mvn shade:shade生成重定位后的类文件和jar - 调整maven-javadoc-plugin配置,基于重定位后的类生成文档:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>3.6.3</version> <configuration> <sourcepath>${project.build.directory}/classes</sourcepath> <!-- 若shade后类文件在其他目录,调整此处路径 --> </configuration> </plugin>
方法3:生成Javadoc后批量替换包名
如果不想编写自定义Doclet,可先生成原始Javadoc,再用maven-replacer-plugin批量替换文档中的旧包名:
- 先用maven-javadoc-plugin生成原始文档
- 配置replacer插件替换所有包名引用:
<plugin> <groupId>com.google.code.maven-replacer-plugin</groupId> <artifactId>replacer</artifactId> <version>1.5.3</version> <executions> <execution> <phase>post-site</phase> <goals> <goal>replace</goal> </goals> <configuration> <file>${project.build.directory}/site/apidocs</file> <includes> <include>**/*.html</include> <include>**/*.css</include> <include>**/*.js</include> </includes> <replacements> <replacement> <token>com.original.engine</token> <value>com.yourgame.engine</value> </replacement> <replacement> <token>com.original.engine.api</token> <value>com.yourgame.api</value> </replacement> </replacements> </configuration> </execution> </executions> </plugin>
内容的提问来源于stack exchange,提问作者Fr33styler
相关产品推荐
相关产品推荐

