Maven打包插件之——maven-jar-plugin、maven-assembly-plugin、maven-shade-plugin
2023-12-25 22:01 l_v_y_forever 阅读(594) 评论(0) 编辑 收藏 举报转载自:https://blog.csdn.net/calm_encode/article/details/103931537
1. 打包插件的介绍
打包插件是把class文件,配置文件打包成一个jar(war或者其他格式)的包。而且可执行jar包中包含或者不包含相应的依赖包包,当不包含相应的依赖包时,我们需要建立lib目录,且jar和lib目录在同级别目录。
2. 常见的打包插件
2.1 maven-jar-plugin
可执行jar包与依赖包是分开的,需要建立lib目录来存放所需的依赖包,且jar包与lib目录在同级别目录中,相应的pom配置如下:
-
<plugin>
-
<groupId>org.apache.maven.plugins</groupId>
-
<artifactId>maven-jar-plugin</artifactId>
-
<version>2.6</version>
-
<configuration>
-
<archive>
-
<manifest>
-
<addClasspath>true</addClasspath>
-
<classpathPrefix>lib/</classpathPrefix>
-
<mainClass>com.xxx.xxxService</mainClass>
-
</manifest>
-
</archive>
-
</configuration>
-
</plugin>
-
<plugin>
-
<groupId>org.apache.maven.plugins</groupId>
-
<artifactId>maven-dependency-plugin</artifactId>
-
<version>2.10</version>
-
<executions>
-
<execution>
-
<id>copy-dependencies</id>
-
<phase>package</phase>
-
<goals>
-
<goal>copy-dependencies</goal>
-
</goals>
-
<configuration>
-
<outputDirectory>${project.build.directory}/lib</outputDirectory>
-
</configuration>
-
</execution>
-
</executions>
-
</plugin>
2.2 maven-assembly-plugin
该插件会将所有的依赖包放入可执行jar包,但是该插件会缺失spring的xds文件,导致jar包无法运行,而且当同级别目录下还有其他可执行文件依赖可能会产生冲突,相应的pom配置如下:
-
<plugin>
-
<artifactId>maven-assembly-plugin</artifactId>
-
<configuration>
-
<descriptorRefs>
-
<descriptorRef>jar-with-dependencies</descriptorRef>
-
</descriptorRefs>
-
<archive>
-
<manifest>
-
<mainClass>com.xxx.xxxService</mainClass>
-
</manifest>
-
</archive>
-
</configuration>
-
<executions>
-
<execution>
-
<id>make-assembly</id>
-
<phase>package</phase>
-
<goals>
-
<goal>single</goal>
-
</goals>
-
</execution>
-
</executions>
-
</plugin>
2.3 maven-shade-plugin
该插件将所有的依赖包放入可执行的jar包中,当同级别目录中有其他的可执行jar包时,依赖可能会产生冲突,且运行jar包时,有时候会出现类似SF,DSA,RSA文件冲突的提示,选哟派相互META-INF目录下的文件,相应pom位置如下:
-
<plugin>
-
<groupId>org.apache.maven.plugins</groupId>
-
<artifactId>maven-shade-plugin</artifactId>
-
<version>2.4.3</version>
-
<executions>
-
<execution>
-
<phase>package</phase>
-
<goals>
-
<goal>shade</goal>
-
</goals>
-
<configuration>
-
<filters>
-
<filter>
-
<artifact>*:*</artifact>
-
<excludes>
-
<exclude>META-INF/*.SF</exclude>
-
<exclude>META-INF/*.DSA</exclude>
-
<exclude>META-INF/*.RSA</exclude>
-
</excludes>
-
</filter>
-
</filters>
-
<transformers>
-
<transformer
-
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-
<resource>META-INF/spring.handlers</resource>
-
</transformer>
-
<transformer
-
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-
<resource>META-INF/spring.schemas</resource>
-
</transformer>
-
<transformer
-
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-
<resource>META-INF/spring.tooling</resource>
-
</transformer>
-
<transformer
-
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-
<mainClass>com.xxx.xxxInvoke</mainClass>
-
</transformer>
-
</transformers>
-
<minimizeJar>true</minimizeJar>
-
<shadedArtifactAttached>true</shadedArtifactAttached>
-
</configuration>
-
</execution>
-
</executions>
-
</plugin>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!