使用Java 17+Maven-Javadoc-Plugin生成文档遇模块导出错误
解决Java 17 + maven-javadoc-plugin 3.2.0生成Javadoc时内部包访问报错问题
问题背景
使用Java 17结合maven-javadoc-plugin 3.2.0生成Javadoc时,因代码引入jdk.internal.reflect.Reflection类,出现如下报错:
import jdk.internal.reflect.Reflection;
[ERROR] ^
[ERROR] (package jdk.internal.reflect is declared in module java.base, which does not
export it to the unnamed module)
此前尝试传递--add-opens参数未解决问题,原因是该参数仅针对运行时反射访问,而Javadoc生成属于编译级别的代码分析,需要使用--add-exports参数开放内部包访问权限。
解决方案
修改maven-javadoc-plugin的配置,在对应的execution节点中添加configuration,通过additionalparam传递--add-exports参数:
<plugin> <artifactId>maven-javadoc-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>attach-javadocs</id> <phase>install</phase> <goals><goal>jar</goal></goals> <configuration> <!-- 允许未命名模块访问java.base模块下的jdk.internal.reflect包 --> <additionalparam>--add-exports java.base/jdk.internal.reflect=ALL-UNNAMED</additionalparam> </configuration> </execution> </executions> </plugin>
原理说明
Java 9及以上的模块系统将jdk.internal.reflect标记为java.base模块的内部包,默认不对外导出。--add-exports参数用于在编译/文档生成阶段,指定模块将特定包导出给目标模块(这里ALL-UNNAMED指代未模块化的项目代码),从而让Javadoc工具能够正常分析该类的代码。
内容的提问来源于stack exchange,提问作者velicanaydin
相关产品推荐
相关产品推荐

