微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Proguard 中包含 java.desktop 模块作为库 jar

如何解决如何在 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 module 的依赖。 javax.swing.tree.TreeNode modulejava.desktop module 的一部分。

我使用以下代码以独立于 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 需要什么来“看到”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",filter: '!module-info.class'
        libraryjars "${System.getProperty('java.home')}/jmods/java.desktop.jmod",filter: '!module-info.class'
     
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。