参见附录中的仓库的 readme 说明
用于 SpringBoot(或war等) 项目 class 文件加密 + 防反编译保护:
.class 被直接反编译fork版本:com.gitee.lcm742320521/classfinal-maven-plugin:1.4.1
原因:
net.roseboy:classfinal 最高仅 1.2.1
<!--classfinal 版本 --><classfinal.version>1.4.1</classfinal.version><!-- 密码: 加密解密使用--><classfinal.password>12345678</classfinal.password><!--加密的包, 多个逗号分隔--><classfinal.packages>cn.xuqiudong.blog</classfinal.packages><!--加密的jar包, 多个逗号分隔--><classfinal.libjars>lcxm-basic-framework:3.5.0-jdk21-3.0.0.jar,lcxm-basic-core:3.5.0-jdk21-3.0.0.jar</classfinal.libjars>
<pluginManagement><plugins><plugin><groupId>com.gitee.lcm742320521</groupId><artifactId>classfinal-maven-plugin</artifactId><version>${classfinal.version}</version><configuration><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码--><password>${classfinal.password}</password><!--需要加密的包, 多个包用逗号分隔--><packages>${classfinal.packages}</packages><!-- 需要加密的配置文件, 多个文件用逗号分隔 --><!--<cfgfiles>application.yml</cfgfiles>--><!--<excludes>org.spring</excludes>--><!-- 需要加密的jar包, 多个jar包用逗号分隔 --><libjars>${classfinal.libjars}</libjars></configuration><executions><execution><phase>package</phase><goals><goal>classFinal</goal></goals></execution></executions></plugin></plugins></pluginManagement>
<profiles><profile><id>classfinal</id><build><plugins><plugin><groupId>com.gitee.lcm742320521</groupId><artifactId>classfinal-maven-plugin</artifactId></plugin></plugins></build></profile></profiles>
mvn clean package -Pclassfinal
target/├── xxx-encrypted.jar // 加密后的jar├── xxx.jar // 原始jar 未加密
java -javaagent:xxx-encrypted.jar="-pwd 12345678" -jar xxx-encrypted.jar"
在 Spring Boot 项目中,classfinal-maven-plugin 需要在 spring-boot-maven-plugin 之后执行。
如果无法调整父 profile 结构,可将 classfinal-maven-plugin 的执行阶段从 package 改为 verify,避免早于 spring-boot:repackage 执行。
(此时打包则 需要先mvn package, 再执行一次mvn verify )
或者直接在具体的项目内的springboot插件下新增classfinal插件, 因为package只会多出个加密的jar,按需使用即可