组件打包常用工具-proguard-maven-plugin等

1.proguard-maven-plugin

复制代码
<plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.0.13</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <attach>true</attach>
                    <attachArtifactClassifier>pg</attachArtifactClassifier>
                    <!-- attach 的作用是在 install 与 deploy 时将生成的 pg 文件也安装与部署 -->
                    <options> <!-- 详细配置方式参考 ProGuard 官方文档 -->
                        <!--<option>-dontobfuscate</option>-->
                        <option>-ignorewarnings</option> <!--忽略所有告警-->
                        <option>-dontshrink</option>   <!--不做 shrink -->
                        <option>-dontoptimize</option> <!--不做 optimize -->
                        <option>-dontskipnonpubliclibraryclasses</option>
                        <option>-dontskipnonpubliclibraryclassmembers</option>
 
                        <option>-repackageclasses com.lwf.proguard.example.project2.pg</option>
                        <!--平行包结构(重构包层次),所有混淆的类放在 pg 包下-->
 
                        <!-- 以下为 Keep,哪些内容保持不变,因为有一些内容混淆后(a,b,c)导致反射或按类名字符串相关的操作失效 -->
 
                        <option>-keep class **.package-info</option>
                         <option>-keep class **.TestClass { *;}</option>
                        <!--保持包注解类-->
 
                        <option>-keepattributes Signature</option>
                        <!--JAXB NEED,具体原因不明,不加会导致 JAXB 出异常,如果不使用 JAXB 根据需要修改-->
                        <!-- Jaxb requires generics to be available to perform xml parsing and without this option ProGuard was not retaining that information after obfuscation. That was causing the exception above. -->
 
                        <option>-keepattributes SourceFile,LineNumberTable,*Annotation*</option>
                        <!--保持源码名与行号(异常时有明确的栈信息),注解(默认会过滤掉所有注解,会影响框架的注解)-->
 
                        <option>-keepclassmembers enum com.lwf.proguard.example.project2.** { *;}</option>
                        <!--保持枚举中的名子,确保枚举 valueOf 可以使用-->
 
                        <option>-keep class com.lwf.proguard.example.project2.bean.** { *;}</option>
                        <!--保持 Bean 类,(由于很多框架会对 Bean 中的内容做反射处理,请根据自己的业务调整) -->
 
                        <option>-keep class com.lwf.proguard.example.project2.Project2 { public void init(); public void
                            destroy(); }
                        </option>
                        <!-- 保持对外的接口性质类对外的类名与方法名不变 -->
 
                    </options>
                    <outjar>${project.build.finalName}-pg</outjar>
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                    </libs>
 
                </configuration>
            </plugin>
  1. maven-shade-plugin

3.maven-Assembly-plugin

复制代码
<!-- 方法三:使用 maven-Assembly-plugin插件打可执行包-->
<!-- 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                      <manifest>
                        <mainClass>com.lwf.test.TestClass</mainClass>
                      </manifest>
                    </archive>
                </configuration>
                <executions>
                  <execution>
                    <id>make-assembly</id>
                    <phase>package</phase> 
                    <goals>
                        <goal>single</goal>
                    </goals>
                  </execution>
                </executions>
            </plugin>
-->      

4.onejar-maven-plugin

复制代码
<!-- 方法四:使用 onejar-maven-plugin插件打可执行包-->
<!--  		
			<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.lwf.test.TestClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.jolira</groupId>
                <artifactId>onejar-maven-plugin</artifactId>
                <version>1.4.4</version>
                <executions>
                    <execution>
                        <configuration>
                            <attachToBuild>true</attachToBuild>
                            <classifier>onejar</classifier>
                        </configuration>
                        <goals>
                            <goal>one-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            
	 -->        

5.mvaen-jar-plugin和 maven-dependency-plugin

复制代码
<!-- 方法五:使用maven-jar-plugin和maven-dependency-plugin打可执行包,引用的包放包外面文件夹下 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
				  <excludes>
					<exclude>**/log4j.properties</exclude>
				  </excludes>
				  <archive>
				  	<!-- 包里面是否包含pom.xml文件和pom.properties文件 -->
				  	<addMavenDescriptor>false</addMavenDescriptor>
				    <manifest>
						<addClasspath>true</addClasspath>
						<mainClass>com.lwf.test.TestClass</mainClass>
						<classpathPrefix>lib/</classpathPrefix>
				    </manifest>
				  </archive>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.5.1</version>
				<executions>
				  <execution>
					<id>copy-dependencies</id>
					<phase>package</phase>
					<goals>
						<goal>copy-dependencies</goal>
					</goals>
					<configuration>
					 <!--  exclude junit, we need runtime dependency only -->
					  <includeScope>runtime</includeScope>
					  <outputDirectory>${project.build.directory}/lib/</outputDirectory>
					</configuration>
				  </execution>
				</executions>
			</plugin>      
			 
			 
			 <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.0.13</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <attach>true</attach>
                    <attachArtifactClassifier>pg</attachArtifactClassifier>
                    <!-- attach 的作用是在 install 与 deploy 时将生成的 pg 文件也安装与部署 -->
                    <options> <!-- 详细配置方式参考 ProGuard 官方文档 -->
                        <!--<option>-dontobfuscate</option>-->
                        <option>-ignorewarnings</option> <!--忽略所有告警-->
                        <option>-dontshrink</option>   <!--不做 shrink -->
                        <option>-dontoptimize</option> <!--不做 optimize -->
                        <option>-dontskipnonpubliclibraryclasses</option>
                        <option>-dontskipnonpubliclibraryclassmembers</option>
 
                        <option>-repackageclasses com.lwf.proguard.example.project2.pg</option>
                        <!--平行包结构(重构包层次),所有混淆的类放在 pg 包下-->
 
                        <!-- 以下为 Keep,哪些内容保持不变,因为有一些内容混淆后(a,b,c)导致反射或按类名字符串相关的操作失效 -->
 
                        <option>-keep class **.package-info</option>
                         <option>-keep class **.TestClass { *;}</option>
                        <!--保持包注解类-->
 
                        <option>-keepattributes Signature</option>
                        <!--JAXB NEED,具体原因不明,不加会导致 JAXB 出异常,如果不使用 JAXB 根据需要修改-->
                        <!-- Jaxb requires generics to be available to perform xml parsing and without this option ProGuard was not retaining that information after obfuscation. That was causing the exception above. -->
 
                        <option>-keepattributes SourceFile,LineNumberTable,*Annotation*</option>
                        <!--保持源码名与行号(异常时有明确的栈信息),注解(默认会过滤掉所有注解,会影响框架的注解)-->
 
                        <option>-keepclassmembers enum com.lwf.proguard.example.project2.** { *;}</option>
                        <!--保持枚举中的名子,确保枚举 valueOf 可以使用-->
 
                        <option>-keep class com.lwf.proguard.example.project2.bean.** { *;}</option>
                        <!--保持 Bean 类,(由于很多框架会对 Bean 中的内容做反射处理,请根据自己的业务调整) -->
 
                        <option>-keep class com.lwf.proguard.example.project2.Project2 { public void init(); public void
                            destroy(); }
                        </option>
                        <!-- 保持对外的接口性质类对外的类名与方法名不变 -->
 
                    </options>
                    <outjar>${project.build.finalName}-pg</outjar>
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                    </libs>
 
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
相关推荐
shushangyun_13 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..13 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
学渣超14 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
掉鱼的猫14 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc
带刺的坐椅14 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai
c2385614 小时前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
error:(15 小时前
【系统与实战双精通】VS Code 调试 ROS2 Python 节点与 Launch 系统指南
android·java·python
Tian_Hang15 小时前
Eclipse Ditto 的权限策略
java·服务器·前端·网络·ide·ubuntu·eclipse
小蓝波16 小时前
docker 的命令
java·docker·容器
AI人工智能+电脑小能手16 小时前
【大白话说Java面试题 第155题】【06_Spring篇】第15题:Spring 如何解决循环依赖问题?
java·spring·循环依赖·三级缓存·aop代理