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

Quarkus Uber-Jar混淆时ProGuard的-keep与-dontwarn失效问题

解决Quarkus Uber-Jar ProGuard混淆未解析引用警告问题

核心问题分析

Quarkus的Uber-Jar包含大量框架依赖,其中不少是运行时动态加载、JNI关联或者JDK内部API引用,ProGuard的静态代码分析会将这些场景误判为未解析引用。单纯添加泛化的-keep规则或全局-dontwarn,往往无法命中具体的依赖场景。

针对性解决方案

1. 精准配置Netty相关规则

Netty的OpenSsl依赖tcnative属于JNI库,编译阶段不存在对应字节码,需明确排除相关警告并保留核心类:

# 保留Netty核心运行时类与接口
-keep class io.netty.** { *; }
-keep interface io.netty.** { *; }
# 忽略tcnative及SSL相关未解析引用警告
-dontwarn io.netty.internal.tcnative.**
-dontwarn io.netty.handler.ssl.**

2. 处理Guava与sun.misc.Unsafe依赖

Guava依赖的sun.misc.Unsafe是JDK内部私有API,ProGuard默认无法解析,需添加以下规则:

# 保留Guava核心类
-keep class com.google.common.** { *; }
# 屏蔽Unsafe及Guava相关未解析警告
-dontwarn sun.misc.Unsafe
-dontwarn com.google.common.**

3. 适配JDK模块系统(Java 9+)

针对java.beans等模块引用问题,需在ProGuard配置中开放模块访问权限并保留必要类:

# 允许访问JDK内部模块的私有包
--add-opens java.base/java.beans=ALL-UNNAMED
--add-opens java.base/sun.misc=ALL-UNNAMED
# 保留JDK相关必要类(按需调整)
-keep class java.beans.** { *; }

4. 优化Gradle ProGuard任务配置

确保ProGuard任务正确依赖quarkusBuild,并指向正确的Uber-Jar路径,示例Gradle配置:

task proguard(type: proguard.gradle.ProGuardTask) {
    dependsOn quarkusBuild
    // 指向Quarkus生成的Uber-Jar
    injars "${buildDir}/quarkus-app/quarkus-run.jar"
    // 指定混淆后Jar输出路径
    outjars "${buildDir}/obfuscated/quarkus-obfuscated.jar"
    // 关联ProGuard配置文件
    configuration file("proguard.conf")
    
    // 引入JDK核心库(根据JDK版本调整)
    if (JavaVersion.current().isJava8()) {
        libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
    } else {
        // Java 9+使用模块路径
        libraryjars "${System.getProperty('java.home')}/jmods", filter: '!**/module-info.class'
    }
}

5. 避免全局-dontwarn,精准屏蔽警告

全局-dontwarn会掩盖真实的代码问题,建议只针对明确的无效警告添加规则,而非全局开启。

验证步骤

  1. 执行./gradlew clean quarkusBuild -Dquarkus.package.type=uber-jar,确保Uber-Jar生成正常
  2. 执行./gradlew proguard,查看警告是否减少
  3. 运行混淆后的Jar:java -jar build/obfuscated/quarkus-obfuscated.jar,验证功能正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:10:15