You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenJDK 11与ProGuard 7.3.2构建时类找不到及重复类问题求助

OpenJDK 11 + ProGuard 7.3.2 构建问题排查

问题现象

构建时出现两类核心问题:

  1. 重复类定义提示:大量jdk.internal.jrtfs和jdk.internal.jimage包下的类被标记为重复定义,共57个类。
  2. 依赖类/方法找不到:com.test.UtilPanel和com.test.Utils中无法找到Swing、AWT相关的类(如javax.swing.JFrame)及方法(如getContentPane())。

已尝试两种Ant配置但未解决:

  • 配置1:直接引入JMOD文件,添加jarfilter="!**.jar"和filter="!module-info.class"
  • 配置2:引入java-rt-jar-stubs-1.5.0.jar

问题原因分析

  1. 重复类问题:

    • 配置中的jarfilter="!**.jar"是错误的。JMOD文件中的类直接存储在classes/目录下,而非内嵌JAR,该过滤规则会干扰ProGuard对JMOD内类的正常读取,可能导致类被重复加载。
    • 构建路径中可能存在重复的JDK类来源(如残留的旧版rt.jar),与JMOD中的类产生冲突。
  2. 依赖缺失问题:

    • java-rt-jar-stubs-1.5.0.jar版本过于老旧,仅适配JDK 1.5,完全不匹配JDK 11的类结构,无法提供Swing/AWT等类的正确定义。
    • 配置1中的jarfilter阻止了ProGuard读取java.desktop.jmod内的Swing/AWT类,导致依赖无法解析。

解决方案

1. 修正JMOD配置,解决重复类

移除jarfilter="!**.jar",让ProGuard正确读取JMOD内的类:

<libraryjar file="/opt/jdk-11/jmods/java.base.jmod" filter="!module-info.class" />
<libraryjar file="/opt/jdk-11/jmods/java.desktop.jmod" filter="!module-info.class" />
<libraryjar file="/opt/jdk-11/jmods/java.management.jmod" filter="!module-info.class" />

同时清理构建目录,检查是否存在旧版JDK JAR(如rt.jar),确保构建路径仅包含JDK 11的JMOD文件。

2. 替换老旧stub包,修复依赖缺失

完全弃用java-rt-jar-stubs-1.5.0.jar,依赖JDK 11的java.desktop.jmod提供Swing/AWT类定义,上述修正后的JMOD配置已包含该模块。

3. 添加ProGuard Keep规则(可选)

为避免Swing相关类被ProGuard误移除,添加以下规则:

-keep class javax.swing.** { *; }
-keep class java.awt.** { *; }
-keep class javax.swing.event.** { *; }
-keep class javax.swing.text.** { *; }

4. 验证构建

清理构建缓存后重新执行Ant构建,检查是否仍有重复类提示及依赖缺失错误。

内容的提问来源于stack exchange,提问作者user4888455

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:39:55