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

3 篇文章 0 订阅


前段时间使用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 的话,生成文件名格式为 a r t i f a c t I d − {artifactId}- artifactId{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 包的打包方式,核心元素如下表所示。

元素类型作用
outputDirectoryString指定包依赖目录,该目录是相对于根目录
includes/include*List< string>包含依赖
excludes/exclude*List< String>排除依赖

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

元素类型作用
outputDirectoryString指定文件集合的输出目录,该目录是相对于根目录
includes/include*List< String>包含文件
excludes/exclude*List< String>排除文件
fileModeString指定文件属性,使用八进制表达,分别为(User)(Group)(Other)所属属性,默认为 0644

其他注意事项

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

插件官方文档地址

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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在使用 Maven 时遇到找不到插件 maven-assembly-plugin 的问题,可以尝试以下解决方法: 1. 检查 Maven配置文件 settings.xml 中是否配置了正确的镜像源。可以在该文件中添加如下配置: ``` <mirrors> <mirror> <id>aliyunmaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ``` 这个配置会将 Maven 的默认镜像源替换为阿里云的镜像源,由于阿里云的镜像源是国内访问速度较快的镜像源之一,可以尝试使用这个配置来解决找不到插件的问题。 2. 检查 Maven 的本地仓库中是否已经下载了 maven-assembly-plugin 插件。可以在本地仓库的目录中查找是否有以下路径存在: ``` ~/.m2/repository/org/apache/maven/plugins/maven-assembly-plugin/ ``` 如果该路径不存在,说明 Maven 还没有下载该插件,可以尝试执行以下命令来下载该插件: ``` mvn dependency:get -Dartifact=org.apache.maven.plugins:maven-assembly-plugin:3.3.0 ``` 这个命令会下载 maven-assembly-plugin 插件的最新版本到本地仓库中。 3. 检查 Maven 的 pom.xml 文件中是否正确引入了 maven-assembly-plugin 插件。可以在 pom.xml 文件中添加以下配置: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> </plugin> </plugins> </build> ``` 这个配置会让 Maven 在构建时自动引入 maven-assembly-plugin 插件,如果该插件已经下载到本地仓库中,就可以正常使用了。 如果以上方法都无法解决问题,可以尝试在 Maven 的命令中加入 -U 参数来强制更新本地仓库中的插件版本。命令如下: ``` mvn clean package -U ``` 这个命令会清除 Maven 的缓存,并从远程仓库下载最新的插件版本到本地仓库中。如果该插件版本存在问题,可以尝试使用其他版本来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值