欢迎访问github
proguard是一款较为容易使用的java代码混淆工具,不需要其他配置,只需在pom中加入即可使用。
下面是具体pom
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardVersion>5.3.3</proguardVersion>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}.jar</outjar>
<obfuscate>true</obfuscate>
<options>
<option>-dontshrink</option>
<option>-dontoptimize</option>
<!-- This option will replace all strings in reflections method invocations
with new class names. For example, invokes Class.forName('className') -->
<option>-adaptclassstrings</option>
<!-- This option will save all original annotations and etc. Otherwise
all we be removed from files. -->
<option>-keepattributes
Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option>
<option>-keepclassmembers public class * {void set*(***);***
get*();}</option>
<!-- This option will save all original names in interfaces (without
obfuscate). -->
<option>-keepnames interface **</option>
<!-- This option will save all original methods parameters in files
defined in -keep sections, otherwise all parameter names will be obfuscate. -->
<option>-keepparameternames</option>
<!-- This option will save all original class files (without obfuscate)
but obfuscate all in domain package. -->
<!--<option>-keep class !com.jincloud.** { *; }</option> -->
<option>-keep
@org.springframework.boot.autoconfigure.SpringBootApplication
class * {*;}</option>
<option>-keep class com.nagisa.zz.** { *; }</option>
<!-- This option will save all original class files (without obfuscate)
in service package -->
<!-- This option will save all original interfaces files (without obfuscate)
in all packages. -->
<option>-keep interface * extends * { *; }</option>
<!-- This option will save all original defined annotations in all
class in all packages. -->
<option>-keepclassmembers class * {
@org.springframework.beans.factory.annotation.Autowired *;
@org.springframework.beans.factory.annotation.Value *;
}
</option>
</options>
<libs>
<!-- Include main JAVA library required. -->
<lib>${java.home}/lib/rt.jar</lib>
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>5.3.3</version>
</dependency>
</dependencies>
</plugin>
<!-- Maven assembly must be run after proguard obfuscation so it take
already obfuscated files. -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<mainClass>com.nagisa.App</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
使用的时候只需改动两处配置
一个是指定不混淆的类,一般实体类及dao层不会加入混淆
<option>-keep class com.nagisa.zz.** { *; }</option>
还有一个
<configuration>
<mainClass>com.nagisa.App</mainClass>
</configuration>
把项目的启动类全类名写入mainClass标签内。
启动的时候直接Run Maven Install。