怎样使用MavenAssemblyPlugin自定义打包目录结构

看不見的法師

看不見的法師

2026-08-05

463人浏览

原创

要让maven打出bin/conf/lib/logs四级分层结构,必须自定义assembly descriptor xml文件,通过fileset映射源目录、dependencyset分离依赖,并绑定maven-assembly-plugin到package阶段。

怎样使用mavenassemblyplugin自定义打包目录结构 - php中文网

要让 Maven 打出符合生产部署要求的目录结构(比如 bin/conf/lib/logs 四级分层),不能依赖 jar-with-dependencies 这类通用模板,必须从零编写 assembly descriptor XML 文件精确控制每个子目录的来源、路径和权限。

准备自定义装配描述文件

在项目根目录下新建 src/assembly/dist.xml,这是整个定制化打包的唯一控制入口。文件名可自定,但路径必须与 pom.xml 中引用位置一致。

文件开头必须声明完整命名空间:dist 是该装配方案的唯一标识符,后续通过 -Pdist-Dassembly.id=dist 显式触发,否则 Maven 会跳过此配置。

每个 <format></format> 行决定输出包类型,至少写一个:<format>tar.gz</format>(Linux 环境首选)或 <format>zip</format>(Windows 兼容)。多个格式可并列,Maven 会生成对应多个归档文件。

true 必须设为 true——否则解压后所有文件直接散落在当前目录,极易污染环境;设为 true 后压缩包顶层会套一层 ${project.artifactId}-${project.version} 目录,这是运维安全底线。

用 fileSet 映射源目录到目标结构

这是控制目录骨架的核心机制。每个 <fileset></fileset> 块负责一组文件的“源→目标”映射,可重复定义多个。

第一步:把启动脚本放进 bin/ 目录
写法:<directory>src/main/scripts</directory><outputdirectory>bin/</outputdirectory><filemode>0755</filemode>
注意 <outputdirectory></outputdirectory> 结尾必须带斜杠,否则 Maven 会当成文件名而非目录。

第二步:把配置模板放进 conf/ 目录
<directory>src/main/config</directory><outputdirectory>conf/</outputdirectory>
无需 <filemode></filemode>,因为配置文件在 Linux 下通常只需读权限(0644),Maven 默认即为此值。

第三步:把 Web 静态资源放进 webapp/ 目录
<directory>src/main/webapp</directory><outputdirectory>webapp/</outputdirectory>
若项目不含 webapp 目录,这行可直接删除,不报错也不影响其他 fileSet 生效。

Maven系列
Maven系列

有些公司并不提供外网给程序员,因此不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器;搭建nexus私服,然后程序员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。感兴趣的朋友可以过来看看

下载

白名单过滤只保留 .sh 文件:<includes><include>*.sh</include></includes>;黑名单排除开发用脚本:<excludes><exclude>dev.sh</exclude></excludes>。二者可共存,exclude 优先级高于 include。

用 dependencySet 分离运行时依赖

方法一:把所有 runtime 作用域的 JAR 放进 lib/
<dependencyset><scope>runtime</scope><outputdirectory>lib/</outputdirectory></dependencyset>
这是最常用方式,确保只有真正运行时需要的依赖被打包,编译期依赖(如 test、provided)被自动剔除。

方法二:排除当前项目主 JAR(避免 lib/ 下出现重复的 demo-1.0.jar)
加一行:<useprojectartifact>false</useprojectartifact>
这一步容易漏掉,漏掉会导致最终包里 lib/ 和顶层各有一份主程序 JAR,启动脚本很可能加载错版本。

方法三:按 groupId 分组打到不同子目录(高级用法)
例如把所有 org.springframework 的依赖放进 lib/spring/<outputdirectory>lib/spring/</outputdirectory><includes><include>org.springframework:*</include></includes>
这种写法需配合 <dependencyset></dependencyset> 多次声明,每个块处理一类依赖。

绑定插件到 Maven 生命周期

打开 pom.xml,在 <build><plugins></plugins></build> 节点内添加 maven-assembly-plugin 配置块。

关键字段必须写全:<groupid>org.apache.maven.plugins</groupid><artifactid>maven-assembly-plugin</artifactid>,版本建议用 3.4.0 或更高(旧版对 fileMode 支持不完善)。

execution 块中 <phase>package</phase> 不可省略——只有绑定到 package 阶段,执行 mvn clean package 时才会触发打包;若绑到 install 阶段,本地调试时无法及时看到 dist 包生成结果。

src/assembly/dist.xml 路径必须与实际文件位置完全一致,区分大小写,且不能以 ../ 开头。Maven 不会报路径错误,而是静默跳过装配,最终只生成默认的 jar 包。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

2025.09.15

1000

19

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

2026.05.09

183

25

Maven零基础入门教程
Maven零基础入门教程

本合集由PHP中文网精心整理,提供Maven零基础入门到完整使用的保姆级教程。内容涵盖环境安装、核心配置、仓库管理及项目构建等核心知识点。通过详细步骤解析与代码示例,助你快速掌握Maven的依赖管理与自动化构建,轻松解决Java项目中的各种痛点,是新手入门与进阶的必备指南。

2026.08.05

2

18

Maven安装及配置教程
Maven安装及配置教程

本合集由PHP中文网精心整理,提供Maven安装配置与环境配置详情指南。内容涵盖Maven下载、解压安装、环境变量配置、阿里云镜像加速及本地仓库修改等全流程。教程通俗易懂,帮助开发者轻松解决依赖管理难题,快速掌握Maven核心构建技能,是Java开发者的必备实战指南。

2026.08.05

2

24

Selenium WebDriver元素定位与页面操作教程
Selenium WebDriver元素定位与页面操作教程

本专题整理Selenium WebDriver元素定位、XPath、CSS Selector、等待机制、窗口切换、Frame处理、Alert弹窗、Cookie操作和文件上传等核心用法。

2026.08.05

8

26

Selenium Grid分布式测试与并行执行教程
Selenium Grid分布式测试与并行执行教程

本专题整理Selenium Grid架构、远程WebDriver、并行测试、Docker部署、Kubernetes动态Grid、浏览器矩阵和测试环境扩展方法,适合进阶自动化测试团队使用。

2026.08.05

4

18

Selenium常见报错排查与自动化测试稳定性
Selenium常见报错排查与自动化测试稳定性

本专题整理Selenium常见报错、驱动版本问题、元素找不到、点击失败、等待超时、浏览器闪退、脚本不稳定和测试用例维护方法。

2026.08.05

0

17

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

31

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

8

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程