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

能否在JVM选项--add-exports中使用通配符*?

开放JDK 17所有内部API的问题解决方法

你尝试用通配符格式的--add-exports参数开放所有内部API,但JVM并不支持java.*/sun.*=ALL-UNNAMED这种跨模块的通配写法,导致实际没导出目标包,所以仍会出现访问报错。

问题原因

--add-exports的正确格式是模块名/包名=ALL-UNNAMED,JVM无法解析java.*作为模块通配、sun.*作为包通配的组合写法,你的参数实际没有生效。

解决方案

1. 逐个添加报错的导出参数

针对当前报错,需要添加:

--add-exports java.base/sun.security.provider.certpath=ALL-UNNAMED

后续遇到其他内部API访问报错,按照模块名/目标包名=ALL-UNNAMED的格式补充参数即可。

2. 批量生成所有相关导出参数

如果想一次性导出所有sun.*和com.sun.*开头的内部包,可以通过JDK工具批量生成参数:
执行以下Shell命令(适用于Linux/macOS,Windows可自行调整脚本逻辑):

for mod in $(java --list-modules | cut -d'@' -f1); do
  for pkg in $(jmod describe "$(echo $mod | tr '.' '/').jmod" | grep -E 'sun\.|com\.sun\.' | awk '{print $2}'); do
    echo "--add-exports $mod/$pkg=ALL-UNNAMED"
  done
done

将命令输出的所有参数复制到启动命令中,即可批量导出大部分内部包。

注意:这种批量方式无法覆盖所有极端情况,如果后续仍有访问报错,还是需要单独补充对应的--add-exports参数。

内容的提问来源于stack exchange,提问作者BlueInf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:28:21