news 2026/4/16 15:03:15

Maven打包之maven-assembly-plugin

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Maven打包之maven-assembly-plugin

打包是一个比较头疼的事情,默认maven打包的结果只包含项目本身的代码,如果要执行代码,还得带上依赖。如果希望将所有依赖放到指定的文件夹下,再在目录下写入shell脚本等之类的事情。maven-shade-plugin插件不能满足需求,而maven-assembly-plugin插件能够帮我们合理地归档文件。

简单的使用

assembly提供了几种默认的打包方式,使用 descriptorRefs, descriptorRef 有 bin, jar-with-dependencies, src, project。【不建议使用】

代码语言:javascript

AI代码解释

<plugins> <plugin> <!-- NOTE: We don't need a groupId specification because the group is org.apache.maven.plugins ...which is assumed by default. --> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin>

descriptor使用原理

assembly允许用户自定义归档文件格式,位置,结构等信息。允许配置并执行多个自定义配置。

所以每一个配置都需要一个唯一id来做区分。归档格式可以有tar.gz,dir,zip,war等等,允许同时归档出多种格式文件。对于打的jar包,可以指定输出目录。对于一组特定的文件,可以指定存放的文件夹。如果有单独需要存放的文件,也可以单独处理。

assembly配置

assembly配置分为两部分,一部分是assembly的配置文件,一部分是在pom.xml中的配置。

assembly配置文件

首先我们通过以下配置文件了解一下配置文件是怎么工作的。

代码语言:javascript

AI代码解释

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd http://maven.apache.org/ASSEMBLY/2.0.0 "> <!--唯一ID--> <id>assembly_test</id> <!--打包格式,允许同时有多个--> <formats> <format>tar.gz</format> <format>dir</format> <format>zip</format> </formats> <!--依赖jar包以及项目打包文件存储文件--> <dependencySets> <dependencySet> <!--存储在projectName-assembly-version/lib下--> <outputDirectory>lib</outputDirectory> </dependencySet> </dependencySets> <fileSets> <fileSet> <!--目录路径,如果不在这里指定,而在include中指定,那么其文件夹的也会被带进去--> <directory>src/main/bin/</directory> <includes> <!--要哪些文件--> <include>*.*</include> </includes> <excludes> <!--不要哪些文件--> <exclude>*.no_need</exclude> </excludes> <!--文件的权限--> <fileMode>0755</fileMode> <!--输出目录 存储在projectName-assembly-version/bin下--> <outputDirectory>bin</outputDirectory> <directoryMode>0755</directoryMode> </fileSet> </fileSets> <files> <!--针对单个文件--> <file> <!--源文件地址,相对于项目地址--> <source>pom.xml</source> <!--输出目录为projectName-assembly-version/--> <outputDirectory>.</outputDirectory> <!--文件的权限--> <fileMode>0755</fileMode> <!--重命名为--> <destName>pom.xml</destName> </file> </files> </assembly>

pom中的配置

assembly插件在pom中配置较为简单,但需要配置maven自带的插件实现main方法添加和classpath依赖。假设上边的assembly配置文件在src/main/assembly/assembly.xml

pom配置内容为

代码语言:javascript

AI代码解释

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3.1</version> <configuration> <archive> <manifest> <!--运行jar包时运行的主类,要求类全名--> <mainClass>com.gavinzh.learn.assembly.Main</mainClass> <!-- 是否指定项目classpath下的依赖 --> <addClasspath>true</addClasspath> <!-- 指定依赖的时候声明前缀 --> <!--<classpathPrefix>./</classpathPrefix>--> </manifest> </archive> </configuration> </plugin> <plugin> <!-- NOTE: We don't need a groupId specification because the group is org.apache.maven.plugins ...which is assumed by default. --> <artifactId>maven-assembly-plugin</artifactId> <version>3.0.0</version> <configuration> <descriptors> <descriptor>src/main/assembly/assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>assembly_test</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

参考

Apache Maven Assembly Plugin

https://www.jianshu.com/p/14bcb17b99e0

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 7:05:42

计算机Net毕设实战-基于net的线上阳光好书系统Asp.net电子书城系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/16 7:05:06

stm32毕业论文(毕设)本科生任务书大全

文章目录 1前言2 STM32 毕设课题3 如何选题3.1 不要给自己挖坑3.2 难度把控3.3 如何命名题目 4 最后 1前言 &#x1f947; 更新单片机嵌入式选题后&#xff0c;不少学弟学妹催学长更新STM32和C51选题系列&#xff0c;感谢大家的认可&#xff0c;来啦&#xff01; 以下是学长亲…

作者头像 李华
网站建设 2026/4/16 7:05:40

数字图像处理篇---Canny算子

我用最通俗易懂的方式解释Canny算子——它是边缘检测领域的“瑞士军刀”&#xff0c;智能且精准。一句话核心思想Canny算子 “聪明的侦探破案”它不是简单地找边缘&#xff0c;而是像侦探一样&#xff1a;收集证据、排除干扰、去伪存真、合理推理&#xff0c;最终找出“真正的…

作者头像 李华
网站建设 2026/4/16 1:39:59

DevOps体系详解01-核心概念与价值

一、DevOps是什么 1.1 定义 DevOps Development&#xff08;开发&#xff09; Operations&#xff08;运维&#xff09; DevOps是一套方法论、文化理念和工具实践的集合&#xff0c;旨在打破开发团队和运维团队之间的壁垒&#xff0c;通过自动化、协作和持续改进&#xff…

作者头像 李华
网站建设 2026/4/16 8:44:04

mycat报错:63529

今天玩mycat 1.6.x 版本的时候在navicat执行建表语句报错 63529 - line 1, column 875, nearby [ON] has error: Syntax error 63529 - line 1, column 957, nearby [ENGINE] has error: Syntax error 该说不说&#xff0c;mycat 风评确实挺差的&#xff0c;能不用还是别用&…

作者头像 李华