Maven打包之maven-assembly-plugin
打包是一个比较头疼的事情,默认maven打包的结果只包含项目本身的代码,如果要执行代码,还得带上依赖。如果希望将所有依赖放到指定的文件夹下,再在目录下写入shell脚本等之类的事情。maven-shade-plugin插件不能满足需求,而maven-assembly-plugin插件能够帮我们合理地归档文件。
简单的使用
assembly提供了几种默认的打包方式,使用 descriptorRefs, descriptorRef 有 bin, jar-with-dependencies, src, project。【不建议使用】
<plugins>
<plugin>
<!-- NOTE: We don't need a groupId specification because the group is
org.apache.maven.plugins ...which is assumed by default.
-->
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
descriptor使用原理
assembly允许用户自定义归档文件格式,位置,结构等信息。允许配置并执行多个自定义配置。
所以每一个配置都需要一个唯一id来做区分。归档格式可以有tar.gz,dir,zip,war等等,允许同时归档出多种格式文件。对于打的jar包,可以指定输出目录。对于一组特定的文件,可以指定存放的文件夹。如果有单独需要存放的文件,也可以单独处理。
assembly配置
assembly配置分为两部分,一部分是assembly的配置文件,一部分是在pom.xml中的配置。
assembly配置文件
首先我们通过以下配置文件了解一下配置文件是怎么工作的。
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd
http://maven.apache.org/ASSEMBLY/2.0.0 ">
<!--唯一ID-->
<id>assembly_test</id>
<!--打包格式,允许同时有多个-->
<formats>
<format>tar.gz</format>
<format>dir</format>
<format>zip</format>
</formats>
<!--依赖jar包以及项目打包文件存储文件-->
<dependencySets>
<dependencySet>
<!--存储在projectName-assembly-version/lib下-->
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<!--目录路径,如果不在这里指定,而在include中指定,那么其文件夹的也会被带进去-->
<directory>src/main/bin/</directory>
<includes>
<!--要哪些文件-->
<include>*.*</include>
</includes>
<excludes>
<!--不要哪些文件-->
<exclude>*.no_need</exclude>
</excludes>
<!--文件的权限-->
<fileMode>0755</fileMode>
<!--输出目录 存储在projectName-assembly-version/bin下-->
<outputDirectory>bin</outputDirectory>
<directoryMode>0755</directoryMode>
</fileSet>
</fileSets>
<files>
<!--针对单个文件-->
<file>
<!--源文件地址,相对于项目地址-->
<source>pom.xml</source>
<!--输出目录为projectName-assembly-version/-->
<outputDirectory>.</outputDirectory>
<!--文件的权限-->
<fileMode>0755</fileMode>
<!--重命名为-->
<destName>pom.xml</destName>
</file>
</files>
</assembly>
pom中的配置
assembly插件在pom中配置较为简单,但需要配置maven自带的插件实现main方法添加和classpath依赖。假设上边的assembly配置文件在src/main/assembly/assembly.xml
pom配置内容为
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<!--运行jar包时运行的主类,要求类全名-->
<mainClass>com.gavinzh.learn.assembly.Main</mainClass>
<!-- 是否指定项目classpath下的依赖 -->
<addClasspath>true</addClasspath>
<!-- 指定依赖的时候声明前缀 -->
<!--<classpathPrefix>./</classpathPrefix>-->
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<!-- NOTE: We don't need a groupId specification because the group is
org.apache.maven.plugins ...which is assumed by default.
-->
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>assembly_test</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>