混淆和打包插件的使用
1. 混淆插件
com.github.wvengen
proguard-maven-plugin
2.0.13
package
proguard
true
true
pg
-target 1.8
-dontshrink
-dontoptimize
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-allowaccessmodification
-useuniqueclassmembernames
-keeppackagenames
-keepattributes
Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
-keepclassmembers public class * {void set*(***);*** get*();}
-keep class com.xxx.web.commonmodel.** {*;}
-keep class com.xxx.web.model.** {*;}
-keep class com.xxx.dasheng_cluster.service.** {*;}
-keep class com.xxx.dasheng_selfsampling.service.** {*;}
-keep class com.xxx.web.util.** {*;}
-keep class com.xxx.web.Swagger2 {*;}
-keep class com.xxx.web.controller.**
-keep class com.xxx.web.service.**
-keep class com.xxx.web.singleton.**
-keep class com.xxx.web.executors.**
-keep class com.xxx.web.interceptor.**
-keep class com.xxx.web.Application
-ignorewarnings
${project.build.finalName}-pg.jar
${java.home}/lib/rt.jar
${java.home}/lib/jce.jar
com/xxx/dasheng/**
classes
${project.build.directory}
4.注意:
打包后会有两个 jar 包, 其中${project.build.finalName}-pg.jar 是混淆后输出的jar, 另一个就是工程输出的包.
使用混淆后的包对工程输出的包进行覆盖,具体如下: 比如混淆后的jar包叫做 class-pg.jar, 工程的输出jar为xxx-SNAPSHOT.jar
执行 sudo ${JAVA_HOME}/bin/jar xvf ./classes-pg.jar >/dev/null 解压混淆包
执行 ${JAVA_HOME}/bin/jar xvf ./xxx-SNAPSHOT.jar >/dev/null 解压输出包
用解压后的混淆包覆盖原始输出包的相关文件,达到混淆的目的
进入混淆后的输出包目录下,执行sudo ${JAVA_HOME}/bin/jar cvfM0 ../xxx-SNAPSHOT-pg.jar ./* >/dev/null进行重新打包. xxx-SNAPSHOT-pg.jar就是最终的可执行的混淆输出包.
2.打包插件
org.codehaus.mojo
appassembler-maven-plugin
2.0.0
target/app
lib
flat
conf
true
src/main/resources
true
true
com.xxx.web.Application
Application
-Dapp.init.name="Application"
-server
-Xmx2G
-Xms2G
package
assemble
4.注意:
插件打包后有三层目录, 名称和作用如下
bin: 启动程序的脚本目录, 默认支持windows 和 linux 两种操作系统.替代java -jar xxx.jar的启动方式.
conf: 配置文件目录
lib: 工程 pom文件依赖的所有 jar包在这个目录下
使用插件时,所有的依赖的jar都要在pom文件中进行dependency.如过某个jar包是从外部引入的, 需要添加到本地或者远程maven仓库中,然后进行依赖. 比如有可能会建立一个lib 目录引入pom文件中没有的jar,这种jar是不能引入到如上所述的三层目录的lib目录下的,程序启动会报异常.