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

如何防止ProGuard从输出JAR中移除module-info.class文件?

解决ProGuard移除module-info.class导致javapackager失败的问题

嘿,我之前在升级JDK10桌面应用的时候也踩过这个ProGuard和模块系统的坑,给你几个亲测有效的解决方案:

1. 修改ProGuard配置,强制保留module-info.class

ProGuard默认会把它认为“未被使用”的类移除,而module-info.class在字节码层面没有直接的调用关系,很容易被误删。你只需要在ProGuard配置文件里添加这条规则:

-keep class module-info { *; }

这条规则明确告诉ProGuard完整保留模块信息类,不会对它进行混淆、优化或移除操作。

2. 保留模块相关属性

除了保留类本身,最好同时保留模块的元数据属性,避免ProGuard清理掉模块声明里的关键信息:

-keepattributes Module*

这会确保模块的依赖、导出包等信息都被完整保留,让javapackager能正确识别模块结构。

3. 手动回补module-info.class(临时 workaround)

如果上面的配置还是没生效,你可以先让ProGuard处理其他类,之后用jar命令把原有的module-info.class添加回混淆后的JAR包:

# 假设你的混淆后JAR叫app-obfuscated.jar,原module-info在当前目录
jar uf app-obfuscated.jar module-info.class

不过这个方法属于临时补救,优先推荐前两种配置层面的解决方案,更稳定。

另外还要注意:确保你的javapackager命令正确指定了模块路径(用--module-path参数指向混淆后的JAR),并且模块声明里的依赖都没有被ProGuard误删哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:00