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

如何为Java命名模块指定Manifest文件的Add-Exports配置

针对命名模块免手动指定--add-exports参数的解决方案如下:

1. 针对mymodule为可执行主模块的场景

MANIFEST.MF中的Add-Exports配置仅作用于未命名模块,且从JDK 17开始该配置默认被安全规则拦截,无法实现预期效果。要让导出规则直接作用于命名模块mymodule,可选择以下两种方案:

  • 轻量方案:使用参数文件封装启动命令
    在JAR包同级目录创建参数文件(比如命名为start.args),内容写入所有需要的启动参数:
    --add-exports java.base/sun.security.x509=mymodule
    --module-path .
    --module mymodule/mymodule.Main
    
    运行时仅需执行java @start.args即可,无需每次手动输入长参数。也可将该命令封装为对应系统的启动脚本(Windows下写.bat文件,Linux/macOS下写.sh文件),用户直接点击脚本即可启动程序。
  • 生产级方案:自定义运行时镜像
    用jlink工具将mymodule和依赖的JDK模块打包为独立运行时,内置导出规则:
    jlink --add-exports java.base/sun.security.x509=mymodule --module-path . --add-modules mymodule --output myruntime
    
    生成的myruntime目录自带定制化JRE,运行时直接执行myruntime/bin/java --module mymodule/mymodule.Main即可,不需要额外添加任何参数。

2. 针对mymodule为底层依赖库的场景

不需要为所有上层调用模块单独配置导出规则,可通过两种方式处理:

  • 若上层应用为非模块化应用,只需在你的依赖库接入文档中明确标注需要添加的--add-exports参数,上层应用启动时统一配置即可。
  • 若上层应用为模块化应用,可在你的依赖库的构建脚本(Maven/Gradle)中配置传递性的模块参数,上层应用引入你的依赖时,构建工具会自动将所需的--add-exports参数添加到编译、运行阶段的参数列表中,不需要上层开发者手动配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:05