一、可执行Jar与依赖包分开
<!--可执行jar与依赖分开,依赖在lib目录里-->
<!--打jar包的插件,把整个maven工程打成jar包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes</classesDirectory>
<archive>
<manifest>
<!--这个属性特别关键,如果没有这个属性,有时候我们引用的包maven库
下面可能会有多个包,并且只有一个是正确的,其余的可能是带时间戳的,
此时会在classpath下面把那个带时间戳的给添加上去,然后我们
在依赖打包的时候,打的是正确的,所以两头会对不上,报错。-->
<useUniqueVersions>false</useUniqueVersions>
<!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
<addClasspath>true</addClasspath>
<!--add start-->
<!-- 这个jar所依赖的jar包添加classPath的时候的前缀,如果这个
jar本身和依赖包在同一级目录,则不需要添加-->
<classpathPrefix>lib/</classpathPrefix>
<!-- jar启动入口类-->
<mainClass>com.test.Test</mainClass>
</manifest>
</archive>
<!-- jar包的位置-->
<outputDirectory>../../build</outputDirectory>
<!--打包出来的文件名,可以不填写,有默认值-->
<finalName>${name}</finalName>
</configuration>
</plugin>
<!--用来拷贝项目所有依赖的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<!-- 一个execution就是一个目标输入位置,如果想把各种资源拆开放的话,就
可以创建多个execution,一个资源文件可以被拷贝多份 -->
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<!-- 拷贝项目依赖包到lib/目录下 -->
<outputDirectory>../../build/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
二、依赖Jar包打进当前可执行jar包
<!--依赖打入一个Jar包方法1 推荐使用-->
<!--所有依赖打到一个jar包,transform部分自定义 -->
<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>
<!--指定启动类Maim方法-->
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.XXX.XXX.Class</mainClass>
</transformer>
<!--spring.handlers 和 spring.schemas 文件以 append 方式加入到构建的 jar 包中,这样就不会出现 xsd 找不到的情况。-->
<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>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
三、依赖打进可执行Jar包方法二
<!--依赖打入一个Jar包方法2 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.XXX.XXX.Test</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>