使用maven-compiler-plugin和maven-assembly-plugin两个插件进行分离依赖打包可执行jar包
pom.xml文件中配置build
<build>
<finalName>打包后的包名</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!-- 解决打包时找不到jdk下面的rt依赖 -->
<compilerArguments>
<verbose />
<bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
<!-- 可运行的jar包内的文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<mainClass>可运行jar包的入口类</mainClass>
<!-- 要分离依赖此处必须填true -->
<addClasspath>true</addClasspath>
<!-- 指定外部jar所在的路径 -->
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<!-- 拼接MANIFEST.MF文件中Class-Path的路径 -->
<Class-Path>./</Class-Path>
</manifestEntries>
</archive>
<excludes>
<!-- 不包括那个文件夹下的文件 -->
<exclude>config/**</exclude>
</excludes>
</configuration>
</plugin>
<!-- 依赖的外部配置 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<!-- 配置文件存放地址 -->
<descriptors>
<descriptor>src/main/resources/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<!--执行器 mvn assembly:assembly-->
<execution>
<id>make-assembly</id> <!--名字任意 -->
<phase>package</phase> <!-- 绑定到package生命周期阶段上 -->
<goals>
<goal>single</goal> <!-- 该打包任务只运行一次 -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
assembly.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<!-- id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话(这里指定的是项目的版本),目标文件则是 ${artifactId}-${id}.jar。【如yigo-core.jar】 -->
<id>package</id>
<formats>
<!-- 指定打包格式,支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式 -->
<format>tar</format>
</formats>
<!-- 指定打的包是否包含打包层目录(比如finalName是yigo-core,当值为true,所有文件被放在包内的yigo-core目录下,否则直接放在包的根目录下)-->
<includeBaseDirectory>false</includeBaseDirectory>
<!-- 指定要包含的文件集,可以定义多个fileSet -->
<fileSets>
<fileSet>
<directory>src/main/resources</directory><!-- 指定归档文件(要打的jar包)要包含的目录(下的文件及文件夹) -->
<outputDirectory>/</outputDirectory><!-- 指定要将当前目录(<directory>标签中的目录放在归档文件(要打的jar包)/目录下) -->
<excludes>
<exclude>cmd/**</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
</fileSets>
<!-- 指定将工程依赖的包打到包里的指定目录下 -->
<dependencySets>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact> <!-- 指定打包时是否包含工程自身生成的jar包 -->
<outputDirectory>lib</outputDirectory><!-- 指定将这些依赖包打到包里lib目录下 -->
<scope>runtime</scope><!-- 用于管理依赖的部署,runtime表示只在运行时使用 -->
<unpack>false</unpack> <!-- 是否打包jar -->
<excludes>
<exclude>不包括哪些文件</exclude>
</excludes>
</dependencySet>
</dependencySets>
</assembly>