maven 的 maven-assembly-plugin 通过 xml descriptor 精准控制打包内容与结构:指定 zip/tar.gz 格式,控制根目录层级,管理依赖位置(lib/ 或 fat-jar),定制资源路径,pom.xml 中配置 、 和 package 触发执行。

用 Maven 的 maven-assembly-plugin 自定义打包,核心是控制“打什么”和“怎么放”——也就是输出目录结构与最终压缩包格式。不需要写复杂脚本,靠一个 XML 描述符(descriptor)就能精准定义文件来源、目标路径、依赖处理方式和归档类型。
明确打包目标格式和根目录结构
在 descriptor 文件(如 src/main/assembly/release.xml)中,<formats></formats> 决定压缩包类型,<includebasedirectory></includebasedirectory> 控制是否生成项目名同名的顶层目录:
-
<format>zip</format>或<format>tar.gz</format>:生成 zip 或 tar.gz 包 -
<includebasedirectory>true</includebasedirectory>:压缩包解压后出现myapp-1.0.0/这样的根目录 -
<includebasedirectory>false</includebasedirectory>:内容直接平铺在压缩包根层(适合脚本调用或容器部署)
按需组织依赖包位置(lib 目录 or 打平进 jar)
依赖默认不参与打包,必须显式声明。通过 <dependencyset></dependencyset> 指定作用域、输出路径和是否解压:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 要生成标准
lib/目录存放所有 runtime 依赖:设置<outputdirectory>lib</outputdirectory>和<scope>runtime</scope> - 想把依赖 JAR 保持原样(不解压)放进 lib:加
<unpack>false</unpack> - 若需合并进主 JAR(可执行 fat-jar):不用
<dependencyset></dependencyset>,改用预设 descriptorjar-with-dependencies,并在<manifest></manifest>中指定mainClass
精确控制资源文件与启动脚本的落点
<fileset></fileset> 用于复制任意本地文件或编译产物,支持路径映射和过滤:
-
<directory>src/main/bin</directory>→<outputdirectory>bin</outputdirectory>:把 shell/bat 脚本复制到压缩包的bin/目录下 -
<directory>${project.build.outputDirectory}</directory>→<outputdirectory>conf</outputdirectory>:把classes/下的配置文件(如 application.yml)单独拎到conf/目录 - 配合
<includes></includes>/<excludes></excludes>可排除开发期配置(如dev.properties),只打包生产用资源
pom.xml 中绑定插件并指向 descriptor
插件本身不干活,关键在 <configuration></configuration> 里告诉它用哪个描述文件、何时执行、输出名怎么定:
-
<descriptor>src/main/assembly/release.xml</descriptor>:显式指定自定义 descriptor 路径(优先级高于descriptorRefs) -
<finalname>${project.artifactId}-${project.version}</finalname>:避免默认带-assembly后缀,让包名更干净 -
<phase>package</phase>+<goal>single</goal>:确保在mvn package时自动触发打包 - 不要同时配置
descriptorRefs和descriptor,后者会覆盖前者
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










