springboot3使用ProGuard混淆jar

好,现在从干净状态 重新做一轮。先执行"删除旧混淆遗留文件",避免之前错误的 BOOT-INF/classes/BOOT-INF/lib、旧 classes-obf.jar、旧 patch 目录继续污染。

第 1 步:停止正在运行的 Java 进程

先确保没有旧的 flower-shine.jar 占用文件:

bat 复制代码
taskkill /F /IM java.exe

如果提示没有进程,可以忽略。


第 2 步:删除旧混淆工作目录

bat 复制代码
rmdir /S /Q E:\Aflower\obfuscate\work

如果提示目录不存在,可以忽略。


第 3 步:删除旧混淆输出 jar 和 mapping

bat 复制代码
del /F /Q E:\Aflower\obfuscate\flower-shine-obf.jar
del /F /Q E:\Aflower\obfuscate\mapping.txt

第 4 步:重新创建干净工作目录

bat 复制代码
mkdir E:\Aflower\obfuscate
mkdir E:\Aflower\obfuscate\work
mkdir E:\Aflower\obfuscate\work\origin
mkdir E:\Aflower\obfuscate\work\classes
mkdir E:\Aflower\obfuscate\work\patch-classes
mkdir E:\Aflower\obfuscate\work\patch-boot

第 5 步:更新原始 jar 备份

你刚刚已经执行了:

bat 复制代码
mvn clean package -DskipTests

所以现在要把最新打包出来的 flower-shine.jar 复制为新的原始包。

假设最新 jar 已经在这里:

text 复制代码
E:\My_Dream_2026_4_7\Flower_AI\release\A-Zhao\resources\flower-shine.jar

执行:

bat 复制代码
copy /Y E:\My_Dream_2026_4_7\Flower_AI\release\A-Zhao\resources\flower-shine.jar E:\Aflower\obfuscate\flower-shine-original.jar

第 6 步:确认原始 jar 能启动

混淆前必须先确认原始 jar 是正常的:

bat 复制代码
cd /d E:\My_Dream_2026_4_7\Flower_AI\release\A-Zhao\resources
java -jar flower-shine.jar

看到 SpringBoot 正常启动后,按:

bat 复制代码
Ctrl + C

停止。


先执行到这里。

如果第 6 步原始 jar 能正常启动,再继续下一步:解包原始 SpringBoot Jar 并生成 classes-in.jar

好,继续下一步:解包原始 SpringBoot Jar,并生成 classes-in.jar

第 7 步:解包原始 jar

bat 复制代码
cd /d E:\Aflower\obfuscate\work\origin
jar xf E:\Aflower\obfuscate\flower-shine-original.jar

第 8 步:确认启动类路径

bat 复制代码
dir E:\Aflower\obfuscate\work\origin\BOOT-INF\classes\com\flower\ShineApplication.class

必须能看到文件。

第 9 步:生成业务 classes 输入包

必须进入 BOOT-INF\classes 目录再打包:

bat 复制代码
cd /d E:\Aflower\obfuscate\work\origin\BOOT-INF\classes
jar cf E:\Aflower\obfuscate\work\classes\classes-in.jar .

第 10 步:确认 classes-in.jar 路径正确

bat 复制代码
jar tf E:\Aflower\obfuscate\work\classes\classes-in.jar | findstr "com/flower/ShineApplication.class"

必须输出:

text 复制代码
com/flower/ShineApplication.class

先执行到第 10 步,确认有输出后,再进入 ProGuard 执行步骤。

不需要单独显示 LicenseStartupVerifier

你第 10 步已经证明:

text 复制代码
classes-in.jar 的路径结构正确

这是当前最关键的。

但因为 LicenseStartupVerifier 是:

java 复制代码
@Component
public class LicenseStartupVerifier implements CommandLineRunner

属于 Spring 启动阶段 Bean,建议 keep,避免混淆后 Spring 扫描异常。

第 11 步:确认 ProGuard 配置

打开:

text 复制代码
E:\Aflower\obfuscate\proguard-boot-classes.pro

确认至少包含这些关键规则:

pro 复制代码
-keep class com.flower.ShineApplication { *; }
-keep class com.flower.**.*Application { *; }

-keep class com.flower.shine.bootstrap.AflowerRuntimeBootstrap { *; }

-keep class com.flower.shine.LicenseStartupVerifier { *; }

-keepattributes StackMapTable,*Annotation*,Signature,InnerClasses,EnclosingMethod,Exceptions,RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations

并确认没有:

pro 复制代码
-dontpreverify
-overloadaggressively
-allowaccessmodification

第 12 步:执行 ProGuard

bat 复制代码
java -jar E:\tools\proguard\lib\proguard.jar @E:\Aflower\obfuscate\proguard-boot-classes.pro

执行完成后不要继续下一步,先检查:

第 13 步:检查混淆后的关键类

bat 复制代码
jar tf E:\Aflower\obfuscate\work\classes\classes-obf.jar | findstr "com/flower/ShineApplication.class"
bat 复制代码
jar tf E:\Aflower\obfuscate\work\classes\classes-obf.jar | findstr "com/flower/shine/LicenseStartupVerifier.class"
bat 复制代码
jar tf E:\Aflower\obfuscate\work\classes\classes-obf.jar | findstr "com/flower/shine/bootstrap/AflowerRuntimeBootstrap.class"

这 3 个都必须有输出。

先执行到第 13 步。

很好,继续执行回填原始 SpringBoot Jar 。这次只用 jar uf,不要用 PowerShell 脚本。

第 14 步:复制原始 jar 为混淆输出 jar

bat 复制代码
copy /Y E:\Aflower\obfuscate\flower-shine-original.jar E:\Aflower\obfuscate\flower-shine-obf.jar

第 15 步:清理 patch 目录

bat 复制代码
rmdir /S /Q E:\Aflower\obfuscate\work\patch-classes
rmdir /S /Q E:\Aflower\obfuscate\work\patch-boot
mkdir E:\Aflower\obfuscate\work\patch-classes
mkdir E:\Aflower\obfuscate\work\patch-boot
mkdir E:\Aflower\obfuscate\work\patch-boot\BOOT-INF
mkdir E:\Aflower\obfuscate\work\patch-boot\BOOT-INF\classes

第 16 步:解压混淆后的 classes

bat 复制代码
cd /d E:\Aflower\obfuscate\work\patch-classes
jar xf E:\Aflower\obfuscate\work\classes\classes-obf.jar

第 17 步:复制到 BOOT-INF/classes 结构

bat 复制代码
xcopy /E /I /Y E:\Aflower\obfuscate\work\patch-classes E:\Aflower\obfuscate\work\patch-boot\BOOT-INF\classes

第 18 步:用 jar uf 覆盖原始 jar

bat 复制代码
cd /d E:\Aflower\obfuscate\work\patch-boot
jar uf E:\Aflower\obfuscate\flower-shine-obf.jar BOOT-INF\classes

第 19 步:检查最终 jar

bat 复制代码
jar tf E:\Aflower\obfuscate\flower-shine-obf.jar | findstr "BOOT-INF/classes/com/flower/ShineApplication.class"

必须有输出。

再执行:

bat 复制代码
jar tf E:\Aflower\obfuscate\flower-shine-obf.jar | findstr "BOOT-INF/classes/BOOT-INF"

必须没有输出。

然后再替换发布 jar。

正常。继续最后替换和启动验收。

第 20 步:替换发布 jar

bat 复制代码
copy /Y E:\Aflower\obfuscate\flower-shine-obf.jar E:\My_Dream_2026_4_7\Flower_AI\release\A-Zhao\resources\flower-shine.jar

第 21 步:启动混淆后的 jar

bat 复制代码
cd /d E:\My_Dream_2026_4_7\Flower_AI\release\A-Zhao\resources
java -Daflower.home=E:/Aflower -jar flower-shine.jar

如果能启动,再验收这些接口:

text 复制代码
/login
/license/status
/license/verify
/deploy/check
/deploy/install

启动成功后,再做最后一步反编译抽查:

bat 复制代码
jar tf E:\My_Dream_2026_4_7\Flower_AI\release\A-Zhao\resources\flower-shine.jar | findstr "com/flower/shine/license"

看 license 包里是否已有混淆后的短类名。

相关推荐
dadaobusi2 小时前
PCIe的ATS和PRS
java·网络·数据库
南境十里·墨染春水2 小时前
线程池学习(二)线程池理解
java·jvm·学习
ZGi.ai2 小时前
私有化大模型接入企业系统:SSO+权限+API网关完整方案
java·开发语言·大模型·私有化部署·sso·企业架构
Han_han9192 小时前
集合进阶(Map集合):
java
吴声子夜歌2 小时前
Java——文件和目录操作
java·文件·目录
吴声子夜歌2 小时前
Java——随机
java·random·随机
aaaak_2 小时前
PDD 直播间 评论 , wss hex Protobuf 解析流程分析学习
java·前端·学习
小雅痞2 小时前
[Java][Leetcode simple] 205. 同构字符串
java·算法·leetcode
多加点辣也没关系2 小时前
设计模式-策略模式
java·设计模式·策略模式