Maven打包插件maven-assembly-plugin配置

  • 简单配置相关说明
  • 在pom.xml文件中的配置
  • 相关标签解释
  • 结果展示
  • 自定义配置说明
  • 自定义配置文件关联
  • 自定义配置文件的设置
  • 其他注意事项
  • 插件官方文档地址



前段时间使用maven和spring boot和同事一起构建了一个项目,最初为了调用spring boot服务,我们重新构建了一个普通的java项目(只能算是小程序吧)。但是由于这个小项目与我们主体的服务项目不在同一个项目中,管理上比较麻烦。前段时间经过重新构建,将这个调用服务的小项目作为一个模块添加到了我们整个的项目中。


随之而来了一个新问题是这个小模块如何单独导出为一个可执行的程序,经过研究后,我们采用maven的打包插件,成功实现了功能,这个插件就是maven-assembly-plugin。(注意:本篇中使用的插件版本号为2.6)

简单配置相关说明

在pom.xml文件中的配置

相关配置内容现在是这样的

<build>
		<finalName>batch-invoke</finalName>
		<!--打包可执行jar包插件 -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-assembly-plugin</artifactId>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
						<configuration>
							<archive>
								<manifest>
									<mainClass>com.dhc.bath.invoke.RemoteBatchInvokeMain</mainClass>
								</manifest>
							</archive>
							<descriptorRefs>
								<descriptorRef>jar-with-dependencies</descriptorRef>
							</descriptorRefs>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

相关标签解释

finaName标签内容指打包后文件名称

<finalName>batch-invoke</finalName>

groupId

<groupId>org.apache.maven.plugins</groupId>

artifactId标签为assembly插件固定写法,表示项目使用maven的assembly插件

<artifactId>maven-assembly-plugin</artifactId>

phase标签指定使用assembly插件的周期(阶段),通常为package

<phase>package</phase>

goal标签用于指定执行方式

<goal>single</goal>

mainClass标签指定jar包主程序入口

<mainClass>com.dhc.bath.invoke.RemoteBatchInvokeMain</mainClass>

descriptorRef标签定义打包方式,官方提供的格式有bin, jar-with-dependencies, src, project
bin : 类似于默认打包,会将bin目录下的文件打到包中
jar-with-dependencies : 会将所有依赖都解压打包到生成物中
src :只将源码目录下的文件打包
project : 将整个project资源打包

<descriptorRef>jar-with-dependencies</descriptorRef>

结果展示

使用maven命令直接打包,或在eclipse中运行maven的package命令打包该项目,在项目路径的target目录中会生成两个jar包,名称分别为batch-invoke.jar和batch-invoke-jar-with-dependencies.jar
其中batch-invoke.jar中只包含项目自身编写的类文件,不包括项目引用其他jar包的内容;batch-invoke-jar-with-dependencies.jar则包括项目自身编写的程序及引入到项目中的其他jar包的程序。
在当前简单配置的模式下,打包成的两个jar包内容格式类似,直接将所有需要打包的程序、配置文件等放在第一层目录中,并在目录中生成META-INF文件夹及相关配置。
由于指定了manifest标签,所以打包完成后的batch-invoke-jar-with-dependencies.jar可以直接运行

自定义配置说明

自定义配置文件关联

在pom.xml文件中assembly插件相关配置下,configuration标签下的descriptors标签中配置自顶配置文件,可以配置多个配置文件,同时进行打包处理。自定义配置文件需要在descriptor标签中,使用相对路径即可。

<configuration>
					<!--配置描述文件路径-->
					<descriptors> 
						<descriptor>src/main/resources/assembly-run-jar.xml</descriptor>
					</descriptors>
				</configuration>

自定义配置文件的设置

<id>assembly</id>
	<formats>
		<format>jar</format>
	</formats>
	<!--是否生成和项目名相同的根目录 -->
	<includeBaseDirectory>false</includeBaseDirectory>
	<dependencySets>
		<dependencySet>
			<outputDirectory>/</outputDirectory>
			<unpack>true</unpack>
			<scope>runtime</scope>
			<!--
			<includes>
				<include>${groupId}:${artifactId}</include>
			</includes>
			<excludes>
				<exclude>${groupId}:${artifactId}</exclude>
			</excludes>
			-->
		</dependencySet>
	</dependencySets>

id
id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话,生成文件名格式为 maven 打包加密插件 maven打包插件配置_maven 打包加密插件{id}.${formats.format}

formats
打包格式,支持zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式

<formats>
	<format>tar.gz</format>
	<format>dir</format>
</formats>

dependencySets
用来定制工程依赖 jar 包的打包方式,核心元素如下表所示。

元素

类型

作用

outputDirectory

String

指定包依赖目录,该目录是相对于根目录

includes/include*

List< string>

包含依赖

excludes/exclude*

List< String>

排除依赖

fileSets
管理一组文件的存放位置,核心元素如下表所示。

元素

类型

作用

outputDirectory

String

指定文件集合的输出目录,该目录是相对于根目录

includes/include*

List< String>

包含文件

excludes/exclude*

List< String>

排除文件

fileMode

String

指定文件属性,使用八进制表达,分别为(User)(Group)(Other)所属属性,默认为 0644

其他注意事项

需要注意,指定运行主程序后,默认自动化打包生成的文件可以正常运行,但是如果使用插件自定义输出目录以后,由于插件无法自动添加目录或者文件路径的跟踪配置,有可能会导致生成的文件无法运行
默认情况下,插件会形成两个打包文件,一个包含依赖关系的,一个不包括依赖关系文件的

插件官方文档地址

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html