java - 如何在 Proguard 中将 java.desktop 模块作为库 jar 包含在内
问题描述
我使用 proguard 使用 proguard gradle 插件来混淆 Java 11(最新 LTS 版本)中的应用程序。这是当前的依赖。我想评论一下,由于与项目有关的其他原因,我必须使用 >= 7.1.0-beta3 的版本。但是,这个问题与此无关。
com.guardsquare:proguard-gradle:7.1.0-beta4
interface
最近添加了对javax.swing.tree.TreeNode 模块的依赖。javax.swing.tree.TreeNode 模块是java.desktop 模块的一部分。
我使用以下代码以与 Java 版本无关的方式包含 JDK 库。以下proguard示例。
if (System.getProperty('java.version').startsWith('1.')) {
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
} else {
libraryjars "${System.getProperty('java.home')}/jmods/java.base.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
}
但是我收到以下警告:
Warning: a.custom.CustomClass: can't find referenced class javax.swing.tree.TreeNode
Execution failed for task ':obfuscation_task'.
> java.io.IOException: Please correct the above warnings first.
proguard 需要什么才能将其“javax.swing.tree.TreeNode
class
视为”库类?
解决方案
我在尝试向问题添加详细信息时找到了解决方案。
错误的原因是从 Java 9 开始,您必须明确指定要添加哪些模块。问题中的代码只是添加了java.base
模块。要添加java.desktop
模块,应添加以下行:
libraryjars "${System.getProperty('java.home')}/jmods/java.desktop.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
java 库包含的完整部分现在是:
if (System.getProperty('java.version').startsWith('1.')) {
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
} else {
libraryjars "${System.getProperty('java.home')}/jmods/java.base.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
libraryjars "${System.getProperty('java.home')}/jmods/java.desktop.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
}
推荐阅读
- java - REST ASSURED TEST 创建我自己的 given() 方法
- azure - 更改 azure ad b2b 目录上的令牌到期时间
- biztalk - BizTalk HTTP 适配器替换字符串“系统找不到指定的文件”。进入 URL - 为什么?
- c++ - 输入日、月、年并存储在单独的结构中
- javascript - 如何在按钮单击时显示验证消息?
- colors - PhpStorm 在哪里更改背景颜色远程主机?
- javascript - 按钮单击时无法读取 null 的属性“setState”
- javascript - javascript 如果 userlang 是 X onclick 值是 Y
- qt - 从 Qt 应用程序访问 Cloud Datastore
- java - 如何在 Java 中解密 aes-256-cbc