原创

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、参考链接

正文到此结束
本文目录