|  | 
 
| Spring Boot项目打包JAR时实现代码混淆的常用方案及实施步骤 以下是针对Spring Boot项目打包JAR时实现代码混淆的常用方案及实施步骤:
 
 一、主流混淆工具及选择
 
 ProGuard
 
 开源工具,通过重命名类/方法/字段名称、优化字节码等方式增加反编译难度。
 需手动配置排除项(如Spring注解、JPA方法等),避免破坏框架功能。
 适用于通用Java项目,但对Spring Boot需额外处理注解兼容性。
 
 ClassFinal
 
 支持命令行和Maven插件集成,操作更简便。
 可对JAR包进行加密,提供密码保护功能。
 需注意排除主启动类(-exclude参数)避免启动失败。
 二、ProGuard混淆实现步骤(以Maven项目为例)
 
 添加Maven插件配置
 在pom.xml中配置proguard-maven-plugin,指定配置文件路径:
 
 xml
 Copy Code
 <plugin>
 <groupId>com.github.wvengen</groupId>
 <artifactId>proguard-maven-plugin</artifactId>
 <version>2.6.0</version>
 <executions>
 <execution>
 <phase>package</phase>
 <goals><goal>proguard</goal></goals>
 </execution>
 </executions>
 <configuration>
 <proguardInclude>${basedir}/proguard.conf</proguardInclude>
 </configuration>
 </plugin>
 
 
 
 
 编写ProGuard配置文件(proguard.conf)
 关键配置示例:
 
 properties
 Copy Code
 # 保留Spring Boot主类及注解
 -keep public class com.example.MainApplication { public static void main(java.lang.String[]); }
 -keep @org.springframework.stereotype.Component public class *
 -keep @org.springframework.context.annotation.Configuration public class *
 # 排除JPA方法名混淆
 -keepclassmembers class * implements org.springframework.data.repository.Repository {
 <methods>;
 }
 # 保留Lombok生成的代码
 -keep class lombok.* { *; }
 
 
 
 
 执行打包命令
 
 bash
 Copy Code
 mvn clean package
 
 三、ClassFinal混淆实现步骤
 
 命令行方式
 
 bash
 Copy Code
 java -jar classfinal-fatjar.jar -file yourproject.jar -packages com.example.** -exclude com.example.Main -pwd 123456 -Y
 
 -packages: 指定需加密的包名
 -exclude: 排除主启动类
 -pwd: 加密密码(可选)
 
 
 Maven插件集成
 在pom.xml中添加插件配置:
 
 xml
 Copy Code
 <plugin>
 <groupId>net.roseboy</groupId>
 <artifactId>classfinal-maven-plugin</artifactId>
 <version>1.2.1</version>
 <configuration>
 <password>123456</password>
 <packages>com.example.**</packages>
 <exclude>com.example.Main</exclude>
 </configuration>
 </plugin>
 
 
 
 
 四、注意事项
 
 测试验证
 
 使用JD-GUI等工具反编译混淆后的JAR,确认关键类名/方法名已不可读。
 运行JAR验证功能正常,避免因混淆导致Spring Bean注入失败等问题。
 
 排除项配置
 
 必须保留:Spring Boot主类、JPA接口方法、Lombok生成代码。
 建议保留:序列化类、反射调用的类/方法。
 
 版本兼容性
 
 ProGuard对高版本JDK(如17+)可能存在兼容性问题,需验证运行环境。
 
 通过上述方案,可有效降低Spring Boot项目代码被反编译后的可读性,保护核心业务逻辑。实际实施时建议结合项目特点选择工具,并通过灰度测试确保稳定性。
 
 | 
 |