如何将 java.desktop 模块作为库 jar 包含在 Proguard 中
How to include java.desktop module as a library jar in Proguard
我使用 proguard gradle 插件混淆 Java 11(最新的 LTS 版本)中的应用程序。这是目前的依赖。我想评论一下,由于与项目有关的其他原因,我必须使用版本 >= 7.1.0-beta3。但是这个问题与那个无关。
com.guardsquare:proguard-gradle:7.1.0-beta4
最近添加了对 interface
javax.swing.tree.TreeNode module 的依赖。
javax.swing.tree.TreeNode module 是 java.desktop 模块的一部分 .
我使用以下代码以 java 版本无关的方式包含 JDK 库。
继 proguard examples.
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 需要什么才能 'see' javax.swing.tree.TreeNode
class
作为库类?
我在尝试向问题添加详细信息时找到了解决方案。
错误的原因是从Java9开始你必须明确指定添加了哪些模块。问题中的代码只是添加了 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'
}
我使用 proguard gradle 插件混淆 Java 11(最新的 LTS 版本)中的应用程序。这是目前的依赖。我想评论一下,由于与项目有关的其他原因,我必须使用版本 >= 7.1.0-beta3。但是这个问题与那个无关。
com.guardsquare:proguard-gradle:7.1.0-beta4
最近添加了对 interface
javax.swing.tree.TreeNode module 的依赖。
javax.swing.tree.TreeNode module 是 java.desktop 模块的一部分 .
我使用以下代码以 java 版本无关的方式包含 JDK 库。 继 proguard examples.
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 需要什么才能 'see' javax.swing.tree.TreeNode
class
作为库类?
我在尝试向问题添加详细信息时找到了解决方案。
错误的原因是从Java9开始你必须明确指定添加了哪些模块。问题中的代码只是添加了 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'
}