java的使用proguard maven進行程式碼混淆
阿新 • • 發佈:2018-11-10
<!-- ProGuard混淆外掛--> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.11</version> <executions> <execution> <!-- 混淆時刻,這裡是打包的時候混淆--> <phase>package</phase> <goals> <!-- 使用外掛的什麼功能,當然是混淆--> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <!-- 是否將生成的PG檔案安裝部署--> <attach>true</attach> <!-- 是否混淆--> <obfuscate>true</obfuscate> <!-- 指定生成檔案分類 --> <attachArtifactClassifier>pg</attachArtifactClassifier> <options> <!-- JDK目標版本1.7--> <option>-target 1.7</option> <!-- 不做收縮(刪除註釋、未被引用程式碼)--> <option>-dontshrink</option> <!-- 不做優化(變更程式碼實現邏輯)--> <option>-dontoptimize</option> <!-- 不路過非公用類檔案及成員--> <option>-dontskipnonpubliclibraryclasses</option> <option>-dontskipnonpubliclibraryclassmembers</option> <!-- 優化時允許訪問並修改有修飾符的類和類的成員 --> <option>-allowaccessmodification</option> <!-- 確定統一的混淆類的成員名稱來增加混淆--> <option>-useuniqueclassmembernames</option> <!-- 不混淆所有包名,本人測試混淆後WEB專案問題實在太多,畢竟Spring配置中有大量固定寫法的包名--> <option>-keeppackagenames</option> <!-- 不混淆所有特殊的類--> <option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option> <!-- 不混淆所有的set/get方法,畢竟專案中使用的部分第三方框架(例如Shiro)會用到大量的set/get對映--> <option>-keepclassmembers public class * {void set*(***);*** get*();}</option> <!-- 不混淆job包下的所有類名,且類中的方法也不混淆--> <option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.job.** { <methods>; }</option> <!-- 不混淆filter包下的所有類名,這裡主要是對Shiro的路踢人過濾器混淆,對類的屬性和方法進行了混淆--> <option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.filter.** </option> <!-- 不混淆憑證包下的所有類名,但對類中的屬性、方法進行混淆,原因是Spring配置中用到了這個類名--> <option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.credntials.** </option> <!-- 混淆目的同上,這個是攔截器的包,包中有防止重複提交的攔截器--> <option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.interceptor.** </option> <!-- 混淆目的同上,這個是域包,包中有使用者登入域--> <option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.realm.** </option> <!-- 不混淆model包中的所有類以及類的屬性及方法,實體包,混淆了會導致ORM框架及前端無法識別--> <option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.model.** {*;}</option> <!-- 以下兩個包因為大部分是Spring管理的Bean,不對包類的類名進行混淆,但對類中的屬性和方法混淆--> <option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.service.** </option> <option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.dao.**</option> </options> <outjar>${project.build.finalName}-pg.jar</outjar> <!-- 新增依賴,這裡你可以按你的需要修改,這裡測試只需要一個JRE的Runtime包就行了 --> <libs> <lib>${java.home}/lib/rt.jar</lib> </libs> <!-- 載入檔案的過濾器,就是你的工程目錄了--> <inFilter>com/chinatelecom/gz/wy/zhukun/shiro_spring/**</inFilter> <!-- 對什麼東西進行載入,這裡僅有classes成功,畢竟你也不可能對配置檔案及JSP混淆吧--> <injar>classes</injar> <!-- 輸出目錄--> <outputDirectory>${project.build.directory}</outputDirectory> </configuration> </plugin>