您好,登录后才能下订单哦!
# Maven-Assembly-Plugin插件怎么使用
## 一、插件概述
### 1.1 什么是maven-assembly-plugin
`maven-assembly-plugin`是Maven生态中用于构建项目分发包的核心插件,它能够将项目输出、依赖项、文档等资源按照自定义规则打包成多种格式的归档文件(如ZIP、TAR、JAR等)。该插件名称中的"assembly"意为"装配",形象地描述了其将项目各组成部分组装成完整分发包的功能。
### 1.2 典型应用场景
- 生成包含所有依赖的**可执行JAR包**(fat-jar)
- 创建包含配置文件的**生产部署包**
- 构建包含文档、脚本的**完整发行包**
- 制作多模块项目的**聚合安装包**
- 生成符合特定目录结构的**平台专用包**
## 二、基础配置
### 2.1 插件引入
在pom.xml中添加插件声明:
```xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<!-- 基础配置 -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
参数名 | 说明 | 示例值 |
---|---|---|
<finalName> |
输出文件名称 | myapp-${version} |
<appendAssemblyId> |
是否在文件名追加assembly id | true |
<descriptors> |
自定义描述文件路径 | src/assembly/dist.xml |
<formats> |
打包格式列表 | <format>zip</format> |
Assembly描述文件通常放在src/assembly
目录下,基本结构如下:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0
http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>dist</id>
<formats>
<format>zip</format>
</formats>
<!-- 其他配置 -->
</assembly>
控制项目资源的包含规则:
<fileSets>
<!-- 包含编译输出 -->
<fileSet>
<directory>${project.build.outputDirectory}</directory>
<outputDirectory>/lib</outputDirectory>
</fileSet>
<!-- 包含配置文件 -->
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/conf</outputDirectory>
<includes>
<include>*.properties</include>
</includes>
</fileSet>
</fileSets>
管理项目依赖的打包方式:
<dependencySets>
<!-- 主依赖包 -->
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<scope>runtime</scope>
</dependencySet>
<!-- 排除测试依赖 -->
<dependencySet>
<outputDirectory>/test-lib</outputDirectory>
<scope>test</scope>
<excludes>
<exclude>junit:junit</exclude>
</excludes>
</dependencySet>
</dependencySets>
通过Maven属性实现环境区分:
<fileSets>
<fileSet>
<directory>src/main/env/${env}</directory>
<outputDirectory>/conf</outputDirectory>
</fileSet>
</fileSets>
执行时指定环境参数:
mvn package -Denv=prod
使用<filtering>
标签启用变量替换:
<fileSet>
<directory>src/main/config</directory>
<outputDirectory>/conf</outputDirectory>
<filtered>true</filtered>
</fileSet>
在配置文件中使用Maven属性:
db.url=${db.url}
支持扩展打包格式(需实现相应Handler):
<formats>
<format>zip</format>
<format>tar.gz</format>
<format>custom</format>
</formats>
<assembly>
<id>fatjar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<containerDescriptorHandlers>
<containerDescriptorHandler>
<handlerName>metaInf-services</handlerName>
</containerDescriptorHandler>
</containerDescriptorHandlers>
</assembly>
<assembly>
<id>full-dist</id>
<formats>
<format>zip</format>
<format>tar.gz</format>
</formats>
<fileSets>
<fileSet>
<directory>target</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/scripts</directory>
<outputDirectory>/bin</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>
当出现依赖冲突时,可以使用<excludes>
过滤特定依赖:
<dependencySet>
<excludes>
<exclude>commons-logging:commons-logging</exclude>
</excludes>
</dependencySet>
通过<useStrictFiltering>
开启严格模式:
<assembly>
<useStrictFiltering>true</useStrictFiltering>
<!-- 其他配置 -->
</assembly>
<include>
/<exclude>
缩小文件范围<useDefaultExcludes>false</useDefaultExcludes>
<unpack>true</unpack>
推荐的标准目录布局:
/myapp
/bin - 启动脚本
/conf - 配置文件
/lib - 依赖库
/logs - 日志目录(需运行时创建)
建议在打包时包含构建信息:
<finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
插件名称 | 特点 | 适用场景 |
---|---|---|
maven-shade-plugin | 支持类重定位 | 解决依赖冲突 |
spring-boot-maven-plugin | 专为Spring Boot优化 | Spring应用打包 |
maven-jar-plugin | 基础JAR打包 | 简单库文件打包 |
maven-assembly-plugin作为Maven生态中最灵活的打包工具,通过本文介绍的: 1. 基础配置方法 2. 描述文件编写技巧 3. 高级功能应用 4. 典型问题解决方案
开发者可以构建出满足各种复杂需求的分发包。建议在实际项目中根据具体需求组合使用不同的配置策略,并建立统一的打包规范。
注意:本文基于maven-assembly-plugin 3.x版本编写,部分配置在旧版本中可能不适用 “`
这篇技术文档包含了: 1. 完整的插件使用指南 2. 详细的配置示例 3. 实际应用场景 4. 问题排查方法 5. 最佳实践建议 6. 与其他工具的对比
总字数约2700字,采用标准的Markdown格式,包含代码块、表格等元素,适合作为技术文档发布。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。