maven assembly让产物更加优美

846 阅读1分钟

maven-assembly-plugin

  1. 定制化打包插件
  2. 项目中往往有很多shell脚本、SQL脚本、.properties及.xml配置项等,采用assembly插件可以让输出的结构清晰而标准化。
  3. 配合着shell启动脚本往往可以达到秒启动的效果,尤其在依赖其他项目或native包的服务部署更为明显,大大的加快了部署效率

如何使用

要使用该插件,就在项目pom文件中的build>plugins配置中加入以下内容。

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-assembly-plugin</artifactId>
	<configuration>
		<descriptors>
			<!-- 指定assembly xml文件 -->
			<descriptor>src/assembly/distribution.xml</descriptor>
		</descriptors>
	</configuration>
	<executions>
		<execution>
			<!-- 名称 -->
			<id>make-assembly</id>
			<!-- 绑定到package生命周期 -->
			<phase>package</phase>
			<goals>
				<!-- 标识只运行一次 -->
				<goal>single</goal>
			</goals>
		</execution>
	</executions>
</plugin>

src/assembly/distribution.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/mavenassembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
	<id>distribution</id>
	<formats>
		<format>dir</format>
		<!-- 文件类型 -->
		<format>tar.gz</format>
	</formats>
	<moduleSets>
		<moduleSet>
			<sources>
				<excludes>
					<exclude>src/main/resources/*.properties</exclude>
					<exclude>src/main/resources/*.xml</exclude>
				</excludes>
			</sources>
		</moduleSet>
	</moduleSets>
	<fileSets>
		<fileSet>
			<!-- 从当前项目的根目录下的doc文件夹中复制所有文件到压缩文件里doc目录下 -->
			<outputDirectory>/doc</outputDirectory>
			<directory>doc</directory>
			<includes>
				<include>**/*</include>
			</includes>
		</fileSet>
		<!-- 从当前项目的根目录下的sql文件夹中复制后缀是.sql文件到压缩文件里sql目录下 -->
		<fileSet>
			<outputDirectory>/sql</outputDirectory>
			<directory>sql</directory>
			<includes>
				<include>*.sql</include>
			</includes>
		</fileSet>
		<!-- 默认创建压缩目录里tmp文件夹可以留作java启动指定临时文件目录 -->
		<fileSet>
			<outputDirectory>/tmp</outputDirectory>
			<directory>target</directory>
			<excludes>
				<exclude>**/*</exclude>
			</excludes>
		</fileSet>
		<!-- 默认创建压缩目录里logs文件夹可以留作java启动指定日志文件目录 -->
		<fileSet>
			<outputDirectory>/logs</outputDirectory>
			<directory>target</directory>
			<excludes>
				<exclude>**/*</exclude>
			</excludes>
		</fileSet>
		<fileSet>
			<outputDirectory>/run</outputDirectory>
			<directory>target</directory>
			<excludes>
				<exclude>**/*</exclude>
			</excludes>
		</fileSet>
		<!-- 获取特定后缀的jar文件作为项目的启动jar -->
		<fileSet>
			<outputDirectory>/lib</outputDirectory>
			<directory>target</directory>
			<includes>
				<include>*-with-dependencies.jar</include>
			</includes>
		</fileSet>
		<!-- 获取bin目录下脚本指定文件格式为unix,并赋权为744 -->
		<fileSet>
			<outputDirectory>/bin</outputDirectory>
			<directory>target/classes/bin</directory>
			<lineEnding>unix</lineEnding>
			<fileMode>0744</fileMode>
		</fileSet>
		<!-- 获取项目路径下的flik的所有资源,打包到压缩目录,这里处理了后缀为.sh的文件,先排除后再转换格式引入 -->
		<fileSet>
			<outputDirectory>/flink</outputDirectory>
			<directory>flink</directory>
			<fileMode>0744</fileMode>
			<excludes>
				<exclude>*.sh</exclude>
			</excludes>
		</fileSet>
		<fileSet>
			<outputDirectory>/flink</outputDirectory>
			<directory>flink</directory>
			<fileMode>0744</fileMode>
			<includes>
				<include>*.sh</include>
			</includes>
			<lineEnding>unix</lineEnding>
		</fileSet>
		<!-- 获取配置文件,打包到压缩文件conf目录下 -->
		<fileSet>
			<outputDirectory>conf</outputDirectory>
			<directory>target/classes</directory>
			<includes>
				<include>*.yaml</include>
				<include>*.yml</include>
				<include>*.properties</include>
				<include>*.setting</include>
				<include>*.xml</include>
				<include>sample/*</include>
				<include>material/*</include>
			</includes>
		</fileSet>
	</fileSets>
</assembly>

此时使用maven打包,就可以得到一个tar.gz的构建产物,配合着启动脚本使用更加强大 maven package