java maven打包插件介绍
1、maven-shade-plugin
1.1、用途
- 将源码以及依赖的三方jar打包成一个整包,类似springboot的效果
- 借助package的重命名功能可以有效地解决包冲突问题
1.2、使用示例
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>org.jb2011</pattern>
<shadedPattern>tech.chenxing.jb2021</shadedPattern>
</relocation>
<relocation>
<pattern>org.jdesktop</pattern>
<shadedPattern>tech.chenxing.jdesktop</shadedPattern>
</relocation>
</relocations>
<!-- 设置 MainClass 创建一个可执行 Jar 包。-->
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>tech.chenxing.Launch</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
2、proguard-maven-plugin
2.1、用途
- 混淆代码,增加破解的难度
2.2、使用示例
<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}-pg.jar</outjar>
<obfuscate>true</obfuscate>
<proguardInclude>${project.basedir}/proguard.conf</proguardInclude>
<libs>
<!-- Include main JAVA library required.-->
<lib>${java.home}/lib/rt.jar</lib>
<!-- Include crypto JAVA library if necessary.-->
<!--<lib>${java.home}/lib/jce.jar</lib>-->
</libs>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>5.3.3</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
2.3、proguard.conf 示例
-target 1.8 ##指定java版本号
-dontshrink ##默认是开启的,这里关闭shrink,即不删除没有使用的类/成员
-ignorewarnings ##关闭警告
-dontoptimize ##默认是开启的,这里关闭字节码级别的优化
-useuniqueclassmembernames ##对于类成员的命名的混淆采取唯一策略
-adaptclassstrings ## 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-dontusemixedcaseclassnames ## 混淆时不生成大小写混合的类名,默认是可以大小写混合
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod ##对异常、注解信息在runtime予以保留,不然影响springboot启动
-keepclasseswithmembers public class * { public static void main(java.lang.String[]);} ##保留main方法的类及其方法名
-keepclassmembers enum * { *; } ##保留枚举成员及方法
-keep class !tech.chenxing.** { *; }
-keep class tech.chenxing.Launch { *; }
-dontwarn tech.chenxing.Launch
-keep class tech.chenxing.domain.** { *; }
-dontwarn tech.chenxing.domain.**
-keep class tech.chenxing.jb2021.** { *; }
-dontwarn tech.chenxing.jb2021.**
-keep class tech.chenxing.jdesktop.** { *; }
-dontwarn tech.chenxing.jdesktop.**
3、参考链接
正文到此结束