我正在将一个Java桌面应用程序升级到JDK10,并需要利用模块来使用
javapackager
构建本地包。一切都很顺利,直到我添加了一个混淆步骤,使用Proguard(6.0.2)进行混淆。启用混淆后(使用来自< JDK9项目的有效proguard配置文件),它按预期工作,但是Proguard从输出JAR中删除了module-info.class
,这会防止javapackager
找到该模块。根据Proguard的injars
参数文档,任何非类文件默认情况下将被复制而不进行更改。问题在于module-info.class
是一个“类”文件(尽管是一个奇怪的文件)。由于“keep”规则依赖于类名称,因此我认为没有任何规则可以用来防止此删除。如何使Proguard保留module-info.class
文件?
module-info.class
以.class
结尾,但它不是一个类文件。根据手册,-keep
选项需要跟随类规范 https://www.guardsquare.com/en/proguard/manual/usage#classspecification。问题在于该文件不包含类/接口/枚举,只有模块的描述。从我所读的内容来看,我使用的版本(6.0.2)应该已经支持 JDK9,因此它应该忽略该文件,但实际上并没有。 - lbarbosa