maven插件maven-assembly-plugin打包归纳文件zip/tar使用详解

文章目录

  • 前言
  • 一、使用方式
  • 二、assembly配置文件详解
    • 1.id
    • 2.formats
    • 3.includeBaseDirectory
    • 4.fileSet
      • directory
      • outputDirectory
      • includes、excludes
    • 5.dependencySets
      • useProjectArtifact
      • outputDirectory
      • excludes
  • 三、使用assembly打包jar文件
  • 总结


前言

java项目运行的文件需要jar或者war格式,同时还需要使用Java命令。同时还可能包含一些外部的资源文件。因此要运行一个Java项目,需要多个文件配合才能启动。因此再发布的时候,我们可以使用maven-assembly-plugin插件,将我们项目需要的所有资源打包成一个zip或者gz的压缩包,这样我们发布出去的项目就是一整套运行环境,我们常用的一些中间件,比如Tomcat、zookeeper等都这样发布。下面给大家详细介绍通过maven-assembly-plugin来制作自己的发布包。

一、使用方式

和其他插件一样,要使用maven-assembly-plugin插件,我们在pom.xml中进行如下配置:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.4.2</version><configuration><descriptors><descriptor>assembly/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions>
</plugin>

二、assembly配置文件详解

在上面的配置中descriptor标签引用了一个package.xml文件,这个文件也是assembly插件的解析文件,package.xml的内容如下面所示:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"><id>win64.vm-${build.version}</id><formats><format>zip</format></formats><includeBaseDirectory>true</includeBaseDirectory><fileSets><fileSet><directory>plugins</directory><outputDirectory>\plugins</outputDirectory><includes><include>plugin.test.dll</include></includes></fileSet><fileSet><directory>prod/jvm</directory><outputDirectory>\</outputDirectory><includes><include>ServiceUpdate.bat</include></includes></fileSet><fileSet><directory>${project.build.directory}</directory><outputDirectory>\</outputDirectory><includes><include>RaspberryAgent.exe</include></includes></fileSet></fileSets>
</assembly>

下面对assembly配置进行详细说明

1.id

id标签可以指定生成的归纳文件名称,但如果我们在插件的configuration标签里面加入:

<configuration><appendAssemblyId>false</appendAssemblyId><finalName>${build.finalName}</finalName><descriptors><descriptor>assembly/package.xml</descriptor></descriptors>
</configuration>

这样ID标签就无效,生成的归纳文件名称由finalName来指定,当我们去掉appendAssemblyId和finalName,那么生成的文件就由id标签来指定,同时descriptors标签下可以添加多个配置文件,因此我们可以在一次构建时打包成多个归纳文件,这个时候就需要使用ID来指定归纳文件的名称。

2.formats

指定归纳文件的格式,支持的格式包含:

  • zip
  • tar
  • tar.gz (or tgz)
  • tar.bz2 (or tbz2)
  • tar.snappy
  • tar.xz (or txz)
  • tar.zst (or tzst)
  • jar
  • dir
  • war

3.includeBaseDirectory

表示生成的归纳文件是否包含根目录,如果包含解压时会生成和文件名相同的根目录

4.fileSet

这里是需要将哪些资源文件打包到归纳文件里面,具体使用如下:

<fileSet><directory>plugins</directory><outputDirectory>\plugins</outputDirectory><includes><include>*.dll</include></includes>
</fileSet>

directory

表示源文件目录

outputDirectory

表示打包到归纳文件后的目录

includes、excludes

过滤作用,includes可以指定需要的文件。excludes可以排除不需要的文件。可以使用正则表达式来进行筛选配置。

5.dependencySets

这个配置可以将所有的jar文件提取出来,常见配置如下:

<dependencySets><dependencySet><useProjectArtifact>true</useProjectArtifact><outputDirectory>lib</outputDirectory><excludes><exclude>${groupId}:${artifactId}</exclude></excludes></dependencySet>
</dependencySets>

这样会在归纳文件中生成一个lib目录,里面包含了项目所依赖的所有jar文件。

useProjectArtifact

是否把本项目添加到依赖文件夹下。

outputDirectory

提取的jar依赖存放的文件夹,当打包成归纳文件时,归纳文件就会生成一个lib的文件夹

excludes

表示要排除的依赖,上面的配置我们是排除了本项目的,这样就不会把本项目的jar文件打入到lib目录下,当然我们也可以不配置excludes,而配置false也能达到同样的效果。如果要排除其他的内库,配置格式: g r o u p I d : {groupId}: groupId:{artifactId}。如下配置:

<dependencySets><dependencySet>....<excludes><exclude>org.apache.commons:commons-lang3</exclude><exclude>org.apache.logging.log4j:log4j-1.2-api</exclude></excludes></dependencySet>....
</dependencySets>

这样就会把commons-lang3和log4j-1.2-api的依赖去掉

三、使用assembly打包jar文件

在assembly的配置中可以选择jar和war格式的文件。因此assembly也可以用来进行jar打包,能实现maven-jar-plugin插件的功能。

如果我们只打包一个内库的jar文件,可以添加如下配置:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.4.2</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions>
</plugin>

另外我还可以使用assembly打包一个可执行的jar文件,配置如下:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.4.2</version><configuration><archive><manifest><mainClass>com.example.testmvnpkgexespringboot.TestMvnPkgExeSpringbootApplication</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions>
</plugin>

注意这两种配置方式都会将项目依赖的所有依赖都会打包到这个jar文件中,我们可以解压打包的jar文件,内容如下:

在这里插入图片描述

同样,如果我要打包可执行的jar文件时,manifest的配置和maven-jar-plugin的配置一样,大家可以参照我的上一篇文章【maven插件maven-jar-plugin构建jar文件详细使用

总结

使用assembly来打包可执行的jar文件,目前貌似只能用于普通的Java项目,如果要打包springboot项目还有一些问题,如果要定制化springboot项目的jar文件,还是需要借助maven-jar-plugin插件,有兴趣的同学可参照我的另外一篇文章:【使用maven对springboot项目进行瘦身分离jar的多种处理方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478552.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis数据库查询

文章目录 什么是MyBatisMyBatis程序的创建MyBatis实现数据库查询传参查询插入实现添加操作获取自增ID删除实现修改实现#{}和${}SQL注入 like查询 resultMap和resultType多表查询 对于普遍的后端开发而言&#xff0c;其程序主要包含了后端主程序和数据库两个部分&#xff0c;用户…

Elasticsearch查询报错 Result window is too large

一现象&#xff1a; es数据分页查询前端提示系统异常&#xff0c;后端报错日志 二根本原因&#xff1a; 默认情况下&#xff0c;Elasticsearch 限制了 from size 参数的组合不能超过 10,000 条记录&#xff0c;用于防止查询大数据集时对系统资源的过度消耗 三解决办法&#…

鸿蒙开发 之 工具安装和环境搭建

DevEco Studio 面向HarmonyOS应用及元服务开发者提供的集成开发环境(IDE)&#xff0c; 助力高效开发。 ArkTS 语言 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&…

并发List、Set、ConcurrentHashMap底层原理

并发List、Set、ConcurrentHashMap底层原理 ArrayList: List特点&#xff1a;元素有放入顺序&#xff0c;元素可重复 存储结构&#xff1a;底层采用数组来实现 public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Clon…

AUTOSAR CP--chapter7从CAN网络学习Autosar通信

从CAN网络学习Autosar通信 前言缩写词CAN通信在AUTOSAR架构中的传输上位机配置 第六章总结&#xff1a;学习了如何使用工具的自动配置功能&#xff0c;位我们生成系统描述中部分ecu的BSW模块配置&#xff0c;但是自动配置的功能虽然为我们提供了极大的便利&#xff0c;我们仍然…

树与二叉树

树与二叉树 文章目录 树与二叉树一、树的概念及结构1.、树的概念2、树的相关概念1.3 树的表示 二、二叉树1.概念2、特殊的二叉树3、二叉树的性质4、二叉树的存储结构 三、二叉树的顺序结构及实现1、二叉树的顺序结构2、堆的概念及结构3、堆的实现 四、二叉树链式结构的实现1、遍…

JAVA--异常处理

目录 1. 异常概述 1.1 什么是生活的异常 1.2 什么是程序的异常 1.3 异常的抛出机制 1.4 如何对待异常 2. Java异常体系 2.1 Throwable 2.2 Error 和 Exception 2.3 编译时异常和运行时异常 3. 常见的错误和异常 3.1 Error 3.2 运行时异常 3.3 编译时异常 4. 异常…

【LeetCode每日一题】单调栈 581. 最短无序连续子数组

581. 最短无序连续子数组 给你一个整数数组 nums &#xff0c;你需要找出一个 连续子数组 &#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组&#xff0c;并输出它的长度。 示例 1&#xff1a; 输入&am…

php实现讯飞星火大模型3.5

前期准备 vscode下载安装好 composer下载安装好 php环境安装好 &#xff08;以上可以自行网上查阅资料&#xff09; 开始实现 1.注册讯飞星火用户&#xff0c;获取token使用 讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞 2.修改对应php文件中的key等 可以参考…

FL Studio21中文版本混音功能介绍

FL Studio 21的混音功能是其音乐制作能力中不可或缺的一部分&#xff0c;它为用户提供了强大的工具&#xff0c;以便他们可以对音轨进行细致的调整&#xff0c;确保音乐作品的最终呈现效果达到最佳。 FL Studio 21 Win-安装包下载如下: https://wm.makeding.com/iclk/?zonei…

修复 Android 手机陷入恢复模式的 5 种方法

您的手机卡在 Android Recovery 模式且无法退出此模式&#xff1f;无论您按什么按钮组合&#xff0c;甚至在取出并重新插入电池后重新启动手机&#xff0c;手机都会启动回到恢复模式吗&#xff1f; Android卡在recovery模式的情况并不罕见&#xff0c;各种品牌的Android手机都…

Stable Diffusion 绘画入门教程(webui)-lora

通过前边的文章&#xff0c;相信大家已经能够自己产出好看的小姐姐或者小哥哥了&#x1f923; 不知道有没有发现每次生成的脸、身材、衣服、环境、风格等等可能都会有所差异&#xff0c;那么如果这个问题不解决&#xff0c;实用性将大大降低&#xff0c;因此lora诞生了。 文章…