如何使用不可见的JDK类?能否自定义编译jdk.jdi模块导出指定包?
自定义jdk.jdi模块导出指定包的可行性
理论上完全可以做到,具体步骤如下:
找到你手中jdk.jdi模块的
module-info.java文件,在其中添加一行导出声明:exports com.sun.tools.example.debug.expr;若只想让你的特定模块访问该包,也可以限定访问范围:
exports com.sun.tools.example.debug.expr to 你的模块名称;重新编译整个jdk.jdi模块。编译时需确保依赖的其他JDK内部模块(如jdk.internal.jvmstat、jdk.management等)已包含在编译路径中,保证编译过程正常完成。
运行你的程序时,两种方式可选:要么替换系统JDK中原始的jdk.jdi模块文件(不推荐,会污染系统环境);要么通过
--module-path参数指定自定义模块的存放路径,让JVM优先加载你修改后的模块版本。
但必须明确几个风险点:
- 这种修改JDK内部模块的操作完全不被官方支持,后续JDK版本更新后你的自定义修改会直接失效。
com.sun.tools.example.debug.expr属于JDK内部示例代码,并非公开标准API,其结构、功能随时可能被调整或移除,你的代码没有任何跨版本兼容性保障。- 部分JDK许可协议可能禁止修改内部模块,商用场景下需格外注意合规问题。
内容的提问来源于stack exchange,提问作者gcworker44
相关产品推荐
相关产品推荐

