我将Java桌面应用程序升级到JDK10,并且需要利用模块来使用javapackager
来构建本机程序包。
在我使用Proguard(6.0.2)添加混淆步骤之前,一切都运行良好。
一旦我启用了混淆(使用< JDK9项目中的工作proguard配置文件),它按预期工作,但Proguard从输出JAR中删除module-info.class
,阻止javapackager
找到模块。
根据Proguard关于injars
参数
默认情况下,不会更改任何非类文件。
这里的问题是module-info.class
是一个"类"文件(尽管很奇怪)。 "保持"规则取决于班级名称,所以我不认为我可以使用任何规则来防止这种删除。
如何让Proguard保留module-info.class
文件?
答案 0 :(得分:1)
在filing a bug report之后,Proguard的作者确认我们需要将module-info
视为另一个类并添加规则以保留它,如下所示:
-keep class module-info
并可能使用
-keepattributes Module*
在我的情况下,我实际上在发布问题之前尝试了它,但它在我使用它的项目上对我不起作用(当我尝试时我得到了NullPointerException
,更多细节在错误报告)
在作者的回复之后,我在一个更简单的项目上尝试了它并且上面的“保持”规则工作得很好,这意味着我的第一个项目特定的东西导致了这个问题。
我现在通过使用gradle将module-info.class
从未经模糊处理的jar复制到混淆的jar中来解决该项目中的问题。它不漂亮,但它有效。
希望这可以帮助处于相同情况的任何人。