1.pom文件插件引用
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<!-- 混淆时刻,注意war包需指定为pre-package-->
<phase>prepare-package</phase>
<goals>
<!-- 指定使用插件的混淆功能 -->
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardVersion>6.2.2</proguardVersion>
<!-- 是否混淆-->
<obfuscate>true</obfuscate>
<!--war必须配置-->
<addMavenDescriptor>true</addMavenDescriptor>
<!--proguard配置文件路径-->
<proguardInclude>${basedir}/proguard.pro</proguardInclude>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jce.jar</lib>
</libs>
<!-- 对什么东西进行加载-->
<injar>classes</injar>
<!-- 输出目录-->
<outputDirectory>${project.build.directory}</outputDirectory>
<injarNotExistsSkip>true</injarNotExistsSkip>
</configuration>
<dependencies>
<!-- https://mvnrepository.com/artifact/net.sf.proguard/proguard-base -->
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>6.2.2</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2.proguard配置文件内容,在项目根目录定义proguard.pro文件
-target 1.8 ##指定java版本号
#不做优化
-dontoptimize
#混淆类名之后,对使用CLass.forName("className")之类的地方进行相应替代
-adaptclassstrings
#不跳过非公用类文件及成员
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
#混淆时不生成大小写混合的类名,避免windows下相互覆盖
-dontusemixedcaseclassnames
#对于类成员的命名采取唯一策略
-useuniqueclassmembernames
#不混淆所有包名
-keeppackagenames
#保留参数名,因为controlLer,/mapper等的参数若混淆会导致无法接受参数,xmL文件找不到参数
-keepparameternames
#keepattributes[attribute_filter]保留属性,多个属性可以用多个-keepattributes,配置也可以用逗号分隔,可以使用?***通配符,或否定符!
-keepattributes Signature,LineNumberTable,SourceFile,Exceptions,InnerClasses,EnclosingMethod,RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations,RuntimeVisibleTypeAnnotations,RuntimeInvisibleTypeAnnotations
#cLass,getResource("")为null,保留目录entry
-keepdirectories
#保留枚举成员和方法
-keepclassmembers enum * {*;}
#对所有类都不进行重命名,并指定若含有指定注解的成员不重命名
-keep class * {
@org.springframework.beans.factory.annotation.Autowired *;
@org.springframework.beans.factory.annotation.Value *;
@javax.annotation.Resource *;
@org.springframework.context.annotation.Bean *;
}
#保留入口main函数
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
#mapper层不混淆,避免xml中找不到
-keep class com.xxx.*.mapper.*{*;}
# 实体类、入参的属性名、响应的属性名不混淆
-keep class com.xxx.*.entity.*{*;}
3.执行编译打包
mvn clean install -Dmaven.test.skip=true -Dmaven.repo.local=/d/mavenHome -Dstart-class=com.xxx.Application