You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:55:24