如何在Maven打包时保留类的Javadoc?maven-shade-plugin配置问题
Maven打包保留类Javadoc注释的解决方案
你当前的maven-shade-plugin配置存在致命问题:配置中排除了所有**/*.class文件,这会导致shade插件完全不处理类文件,自然无法保留注释。
要实现打包时保留类的Javadoc注释,需从编译阶段和shade打包阶段两部分调整配置:
1. 配置maven-compiler-plugin保留注释
Java编译器默认会丢弃Javadoc注释,必须通过编译参数让编译器将注释元数据嵌入class文件:
<build> <plugins> <!-- 编译阶段保留注释元数据 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>1.8</source> <!-- 替换为你的实际JDK版本 --> <target>1.8</target> <compilerArgs> <arg>-Xdoclint:none</arg> <!-- 可选:关闭文档格式检查,避免因注释不规范导致编译失败 --> <arg>-keepattributes</arg> <arg>SourceFile,LineNumberTable,Deprecated,Synthetic,Signature,RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations,AnnotationDefault,EnclosingMethod</arg> <arg>-keepclassmembers</arg> <arg>public class * { public protected *; }</arg> </compilerArgs> </configuration> </plugin> </plugins> </build>
-keepattributes指定需要保留的class属性集合,其中包含了注释相关的元数据;-keepclassmembers确保类成员的注释也能被保留。
2. 修正maven-shade-plugin配置
移除之前错误的excludes规则,shade插件默认不会清除class文件中的注释,只需正常配置打包逻辑即可:
<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> <!-- 可在此添加自定义打包规则,比如指定主类、过滤依赖等 --> <!-- 无需排除class文件 --> </configuration> </execution> </executions> </plugin>
验证配置是否生效
打包完成后,使用javap命令查看class文件的元数据:
javap -v target/[你的shaded包名称].jar!/[你的类全路径].class
如果输出中包含SourceFile、LineNumberTable等属性,说明注释元数据已成功保留。
内容的提问来源于stack exchange,提问作者jiang lu
相关产品推荐
相关产品推荐

