【发布时间】:2018-05-06 18:27:25
【问题描述】:
我正在将 Java 桌面应用程序升级到 JDK10,并且需要利用模块来使用 javapackager 来构建本机包。
在我使用 Proguard (6.0.2) 添加了一个混淆步骤之前,一切都很好。
一旦我启用了混淆(使用 module-info.class,这会阻止 javapackager 找到模块。
根据 Proguard 的 injars 参数文档
默认情况下,任何非类文件都将被复制而不做任何更改。
这里的问题是module-info.class 是一个“类”文件(虽然很奇怪)。 “保留”规则取决于类名,所以我认为没有任何规则可以用来防止这种删除。
如何让 Proguard 保留 module-info.class 文件?
【问题讨论】:
-
这看起来像一个有用的产品。我也打算试一试,假设你发现的这个问题已经解决了!我很好奇你尝试了什么。查看“保留概述”guardsquare.com/en/proguard/manual/usage#keepoverview 似乎一个简单的 -keep 应该既可以防止 module-info.class 被重命名或删除。您能否更详细地说明一下如何将 -keep 选项与 module-info.class 一起使用?祝你好运!
-
就是这样,尽管
module-info.class以.class结尾,但它不是类文件。根据手册,-keep选项需要后跟类规范guardsquare.com/en/proguard/manual/usage#classspecification。问题是该文件不包含类/接口/枚举,只是模块的描述。根据我的阅读,我使用的版本(6.0.2)应该已经支持JDK9,所以它忽略该文件是很自然的,但事实并非如此。 -
软件制造商是否提供响应式支持?另外,我想知道是否可以将某种注释添加到模块信息中以防止其被删除。我会在这里关注更新,如果我发现任何有用的信息,我会在完成此步骤后更新自己。
-
是的,作者非常有帮助,请在下面查看我的答案
-
感谢您的跟进。至于我自己,我决定使用 Inno-Setup 5 并放弃混淆,并且我发现打包的路线是可行的。 (我正在打包项目上JLINK操作的结果文件系统。)
标签: java gradle proguard java-platform-module-system