maven-assembly-plugin可用于打自定义的分发包,可以使用内置的预指定的descriptors,或自己编写descriptors的xml文件,将依赖,文档信息,以及单个文件或文件夹,自由的组合在一起。
在pom文件中的插件中定义,maven-assembly-plugin插件只有一个goal就是single
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>3.1.1version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xmldescriptor>
descriptors>
configuration>
<executions>
<execution>
<id>make-assemblyid>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
execution>
executions>
plugin>
maven-assembly-plugin插件预制定了4个descriptor,bin,jar-with-dependencies,src,project,其中jar-with-dependencies可以把依赖的jar都打成一个jar,其他的用的很少,详细的使用信息可以看官方的文档
http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html
具体的标签类型看官方文档,下面介绍几个常用的元素
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html
用于表示打包的文件集合的表示符,会用于生成的档案文件的文件名
生成打包文件的文件类型,可以同时指定多种类型,每种类型的打包都会生成
zip,tar,tar.gz,tgz,tar.bz2,tar.snappy,tar.xz,txz,jar,dir,war
是否选择包含一个基础目录true/false,如果选择true,在最终存档中包含一个基本目录,如果baseDirectory元素指定了值,则使用该值,如果没有指定则使用${project.build.finalName}作为该值。例如,如果您正在创建一个名为“app”的程序集,将includeBaseDirectory设置为true将创建一个包含这个基本目录的存档。如果将此选项设置为false,则创建的存档将解压其内容到当前目录,对比如下,includeBaseDirectory为true
includeBaseDirectory为false
用来处理文件集合将其按照指定的方式输出
outputDirectory:设置输出目录,该目录是相对与根目录的,
例如:
如果设置了includeBaseDirectory为false,那么实际的bin目录在**/target/**.tar.gz/bin/
<fileSet>
<directory>src/main/bindirectory>
<includes>
<include>*include>
includes>
<outputDirectory>binoutputDirectory>
fileSet>
includes/include*:选择被包含的文件和目录,可以设置多个元素,如果未设置该元素,则默认包含所有有效的值
excludes/exclude*:选择剔除的文件或目录,如果未设置,则为none
fileMode:unix的文件权限,默认为0644
directoryMode:unix的设置目录权限,默认为0755
用来处理文件
<files>
<file>
<source>target/${project.artifactId}-${project.version}.warsource>
<outputDirectory>.outputDirectory>
file>
files>
**source:**可以是相对路径或绝对路径,相对路径是相对与项目的根目录。
outputDirectory:输出目录
destName:输出文件名
fileMode:unix文件权限
用来处理文件集合将其按照指定的方式输出
outputDirectory:设置输出目录,该目录是相对与根目录的,
例如:
includes/include*:选择包含的依赖,可以设置多个元素,形式如groupId:artifactId,也可使用通配符 *:spring-*
excludes/exclude*:选择剔除的依赖,可以设置多个元素,形式如groupId:artifactId,也可使用通配符 *:spring-*
fileMode:unix的文件权限,默认为0644
scope:设置依赖的范围,默认为runtime
useProjectArtifact:是否包含当前项目自己生成的包,默认为true
完整实例如下:
<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>binid>
<includeBaseDirectory>falseincludeBaseDirectory>
<formats>
<format>tar.gzformat>
formats>
<dependencySets>
<dependencySet>
<outputDirectory>/liboutputDirectory>
dependencySet>
dependencySets>
<fileSets>
<fileSet>
<directory>src/main/dbdirectory>
<includes>
<include>*.sqlinclude>
includes>
<fileMode>0755fileMode>
<outputDirectory>./db/doutputDirectory>
fileSet>
<fileSet>
<directory>${project.basedir}/srcdirectory>
fileSet>
<fileSet>
<directory>src/main/bindirectory>
<includes>
<include>*include>
includes>
<outputDirectory>binoutputDirectory>
fileSet>
fileSets>
<files>
<file>
<source>target/${project.artifactId}-${project.version}.warsource>
<outputDirectory>.outputDirectory>
file>
files>
assembly>