需要引入三个Maven插件:
-
maven-jar-plugin
:用于打包代码,并去除不需要一起打包的resource文件 -
maven-assembly-plugin
:主要用来打压缩包,配置我们打包后的整体文件结构 -
maven-antrun-plugin
:主要用来解压 maven-assembly-plugin 插件打好的压缩包,去掉打包完成后自己去手动解压的步骤
maven-jar-plugin
配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!--指定入口类,必须全类名-->
<mainClass>com.andlinks.art.ArtApplication</mainClass>
<!-- 指定依赖的声明前缀,会在依赖Jar包的路径加上前缀lib/ -->
<classpathPrefix>lib/</classpathPrefix>
<!--为true后会将所有依赖Jar包的路径写入 MANIFEST Class-Path 中-->
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<!--添加一个 Class-Path 路径-->
<Class-Path>resources/</Class-Path>
</manifestEntries>
</archive>
<excludes>
<!--排除掉打包进Jar中的文件 **/ 表示所有目录,根据自己 实际情况选择排除的文件-->
<exclude>**/*.yml</exclude>
<exclude>**/*.sh</exclude>
<exclude>**/bin/</exclude>
<exclude>**/conf/</exclude>
<exclude>**/*.xml</exclude>
<exclude>**/*.properties</exclude>
</excludes>
</configuration>
</plugin>
maven-assembly-plugin 配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!--configuration配置后,将会生成一个{finalname}-{assembly-descriptor中的id}.jar 文件在目录 output 下,其中的内容和默认的打包出来的jar类似,
如果只想有finalName,则增加配置:<appendAssemblyId/>-->
<appendAssemblyId>false</appendAssemblyId>
<!--压缩包的输出目录-->
<outputDirectory>${project.build.directory}/dist/</outputDirectory>
<descriptors>
<!--descriptor文件目录-->
<descriptor>src/main/resources/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<!--无特殊用途-->
<id>make-assembly</id>
<!--绑定到package生命周期阶段上-->
<phase>package</phase>
<goals>
<!--只运行一次-->
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
assembly.xml 文件参考:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<!--标识符,添加到生成文件名称的后缀符。如果指定 id 的话,目标文件则是 ${artifactId}-${id}.zip-->
<id>demo</id>
<formats>
<!--指定打包类型: zip、tar、tar.gz(or tgz)、tar.bz2 (or tbz2)、tar.snappy 、tar.xz (or txz)、jar、dir、war-->
<format>zip</format>
</formats>
<!--是否包含根目录,为true会将所有文件放置在压缩包的{finalName}命名的文件夹中-->
<includeBaseDirectory>false</includeBaseDirectory>
<!--指定打包的文件与输出目录-->
<fileSets>
<fileSet>
<!--打包resources目录下的所有文件-->
<directory>src/main/resources</directory>
<!--输出至resources目录-->
<outputDirectory>/resources</outputDirectory>
<excludes>
<!--排除assembly.xml 文件-->
<exclude>assembly.xml</exclude>
</excludes>
</fileSet>
</fileSets>
<!--项目依赖的处理-->
<dependencySets>
<dependencySet>
<!--是否打包项目本身JAR包-->
<useProjectArtifact>false</useProjectArtifact>
<!--依赖输出目录-->
<outputDirectory>/lib</outputDirectory>
<!--打包的依赖默认生命周期级别-->
<scope>runtime</scope>
<!--排除文件配置-->
<excludes>
<exclude>${project.groupId}:${project.artifactId}</exclude>
</excludes>
</dependencySet>
<!--将项目本身JAR包放到输出目录根目录下-->
<dependencySet>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.groupId}:${project.artifactId}</include>
</includes>
</dependencySet>
</dependencySets>
</assembly>
压缩包自解压配置:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<!-- 绑定到package生命周期阶段上 -->
<phase>package</phase>
<configuration>
<tasks>
<echo message="unziping ${project.artifactId}.zip"/>
<!-- src:需要解压文件的路径,dest:文件解压之后的路径 -->
<unzip src="target/dist/${project.artifactId}.zip" dest="target/dist/${project.artifactId}"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>