混淆打包工具
在pom.xml中加入插件
<!-- ProGuard混淆插件-->
<groupId>com.github.wvengen
<artifactId>proguard-maven-plugin
<version>2.3.1
<!-- 混淆时刻,这里是打包的时候混淆-->
<phase>package
<!-- 指定使用插件的混淆功能 -->
<goal>proguard
<proguardVersion>6.2.2
<!-- 是否将生成的PG文件安装部署-->
<attach>true
<!-- 是否混淆-->
<obfuscate>true
<!-- 指定生成文件分类 -->
<attachArtifactClassifier>pg
<proguardInclude>${basedir}/proguard.conf
<lib>${java.home}/lib/rt.jar
<lib>${java.home}/lib/jce.jar
<lib>${java.home}/lib/jsse.jar
<!-- 对什么东西进行加载,这里仅有classes成功,不可能对配置文件及JSP混淆吧-->
<injar>classes
<outjar>${project.build.finalName}-pg.jar
<!-- 输出目录-->
<outputDirectory>${project.build.directory}
<groupId>net.sf.proguard
<artifactId>proguard-base
<version>6.2.2
</plugin>
配置proguard.conf
# 忽略所有警告,否则有警告的时候混淆会停止
-ignorewarnings
# JDK目标版本1.8
-target 1.8
# 不做收缩(删除注释、未被引用代码)
-dontshrink
# 不做优化(变更代码实现逻辑)
-dontoptimize
# 不路过非公用类文件及成员
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
## 混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
# 优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification
# 确定统一的混淆类的成员名称来增加混淆
-useuniqueclassmembernames
# 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有大量固定写法的包名
-keeppackagenames
# 不混淆局部变量名
-keepparameternames
# 不删除注解
-keepattributes *Annotation*
# 不混淆所有特殊的类LocalVariable*Table,
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,Synthetic,EnclosingMethod
# 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射
-keepclassmembers public class * {void set*(***);*** get*();}
##对异常、注解信息在runtime予以保留,不然影响springboot启动
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
##保留main方法的类及其方法名
#-keepclasseswithmembers public class * { public static void main(java.lang.String[]);}
##保留枚举成员及方法
-keepclassmembers enum * { *; }
# 不混淆泛型
-keepattributes Signature
#!!!!!!!不混淆dao和domain!!!!!
-keep class a.b.*.controller.** {*;}
#可以通过这个配置自己添加混淆字典
#-classobfuscationdictionary ./filename.txt
## 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
#-adaptclassstrings
# 保持类protected不被混淆
#-keep public class * { public protected ;public protected ; }
-keepdirectories 如果找不到接口路径的话 可以配置这个