深入探讨Maven打包:打造精致的Zip包

在部署Spring Boot生产项目时,首先需要使用Maven将其打包成一个JAR文件或者包含JAR文件的ZIP文件。随后,通过堡垒机将打包好的文件上传至服务器进行部署,或构建成Docker镜像进行发布。在这一过程中,我们需要将项目中的配置文件或静态资源放置在JAR包之外,这样在修改配置文件或静态资源时就无需重新打包。为了构建ZIP文件,我们使用了Maven Assembly Plugin插件,该插件用于创建项目分发包,通过一个XML描述文件定义打包内容。本文将详细介绍这一流程。

6fe38d46bf0f4555b05931b6c27c5793_3.png

maven-assembly-plugin简介

maven-assembly-plugin 是一个 Maven 插件,用于创建项目分发包。该插件可以帮助将项目的构建输出、依赖库等资源打包成一个归档文件,如 JAR、ZIP、TAR 等,方便项目的部署和发布。

以下是 maven-assembly-plugin 的一些主要特点和用途:

  • 灵活的配置:通过配置插件,可以定义不同的打包方式和内容,满足各种项目的需求。可以选择包含依赖库、特定文件、目录结构等。

  • 多种打包格式:支持生成不同格式的归档文件,如 JAR 包含所有依赖、ZIP 压缩文件、TAR 文件等,可以根据实际情况选择合适的打包格式。

  • 自定义描述符:除了预定义的描述符外,还可以编写自定义描述符文件,以更精细的方式控制打包过程,定义需要包含的文件、目录结构等。

  • 插件执行阶段:通常在 Maven 构建的某个阶段(如 package 阶段)触发执行,生成所需的分发包。

  • 简化部署流程:打包成归档文件后,可以方便地进行部署和发布,简化了项目的交付流程。

maven-assembly-plugin 配置

让我们来看一下 Maven Assembly Plugin 的配置文件 package.xml,这个文件定义了项目打包的内容和形式。在这个 XML 文件中,我们定义了项目打包的格式为 zip 和 dir,同时指定了一些文件和目录的打包规则。

package.xml


<?xml version="1.0" encoding="UTF-8"?>
<assemblyxmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"><!--项目打包统一文件 --><id>package</id><formats><format>zip</format><format>dir</format></formats><includeBaseDirectory>false</includeBaseDirectory><dependencySets><dependencySet><outputDirectory>lib</outputDirectory><scope>runtime</scope><excludes><exclude>${groupId}:${artifactId}</exclude></excludes></dependencySet></dependencySets><fileSets><!-- 启动脚本文件打包 --><fileSet><directory>bin/</directory><outputDirectory>./</outputDirectory><includes><include>*.sh</include></includes><fileMode>0755</fileMode><lineEnding>unix</lineEnding></fileSet><!--资源文件打包 --><fileSet><directory>src/main/resources</directory><outputDirectory>./</outputDirectory></fileSet><!-- 启动jar文件打包 --><fileSet><directory>${project.build.directory}</directory><outputDirectory>./</outputDirectory><includes><include>*.jar</include></includes></fileSet></fileSets>
</assembly>

在 package.xml 中,我们还可以定义需要打包的依赖库、启动脚本文件、静态资源文件以及启动 jar 文件等内容。也可以在通过来排除一些我们不需要的资源, 通过这个 XML 文件,我们可以灵活地配置项目打包的内容和结构。

Maven Build 配置

在项目的POM文件中,我们还需要引入maven-assembly-plugin插件,并指定其配置文件。由于我们需要将配置文件和静态资源放置在JAR包之外,因此在打包过程中需要排除这些文件。Maven的配置示例如下:

	<build><!--<finalName>${project.artifactId}-${project.version}</finalName>--><sourceDirectory>src/main/java</sourceDirectory><resources><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering><excludes><exclude>*</exclude></excludes></resource><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.1.0</version><configuration><encoding>UTF-8</encoding><nonFilteredFileExtensions><nonFilteredFileExtension>xls</nonFilteredFileExtension><nonFilteredFileExtension>xlsx</nonFilteredFileExtension><nonFilteredFileExtension>csv</nonFilteredFileExtension></nonFilteredFileExtensions></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.0</version><configuration><archive><!-- 添加index则不从mainfest中读取classpath,而是从Index.list中读取<index>true</index> --><manifest><mainClass>cn.xj.snowflake.SnowflakeApplication</mainClass><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><packageName>${project.artifactId}-${project.version}</packageName></manifest></archive><excludes><exclude>config/**</exclude><exclude>mapper/**</exclude><exclude>mybatis/**</exclude><exclude>static/**</exclude><exclude>templates/**</exclude><exclude>i18n/**</exclude><exclude>lib/**</exclude><exclude>vm/**</exclude><exclude>*.txt</exclude><exclude>*.xml</exclude><exclude>*.properties</exclude><exclude>*.yml</exclude><exclude>*.properties</exclude></excludes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy</id><phase>compile</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib</outputDirectory><overWriteReleases>false</overWriteReleases><overWriteSnapshots>false</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><includeScope>compile</includeScope></configuration></execution></executions></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptors><descriptor>conf/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

在 Maven Build 的配置中,我们引入了 maven-resources-plugin、maven-jar-plugin、maven-dependency-plugin 和 maven-assembly-plugin 这几个插件,并对它们进行了相应的配置。

总结

当我们执行 mvn package 命令进行打包时,Maven 会按照配置文件 package.xml 和插件的配置来生成最终的分发包。Maven Assembly Plugin 会根据配置文件定义的规则将项目的相关文件、依赖库等内容打包成指定的格式,并完成最终的分发包构建。

通过以上的配置和打包过程,我们可以很方便地使用 Maven 来管理项目的打包和发布,而不需要手动进行复杂的文件拷贝和整理工作。

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

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

相关文章

Unity 布局控制器Content Size Fitter

Content Size Fitter是Unity中的一种布局控制器组件&#xff0c;用于根据其内容的大小来调整包含它的UI元素的大小。换句话来说就是&#xff0c;Content Size Fitter可以根据UI元素内部内容的大小&#xff0c;自动调整UI元素的大小&#xff0c;以确保内容能够正确显示。 如下图…

深度强化学习(十)(TRPO)

深度强化学习&#xff08;十&#xff09;&#xff08;TRPO与PPO&#xff09; 一.信赖域方法 原问题&#xff1a; maxmize J ( θ ) \text{maxmize} \qquad\qquad J(\theta) maxmizeJ(θ) J J J是个很复杂的函数&#xff0c;我们甚至可能不知道 J J J 的解析表达式&#xff…

华为ENSP的VLAN原理和配置命令

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; ————前言———— VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09;是一种在物理网络基…

【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针赋值和测试

目录 前言 Tessy 如何进行打桩操作 普通桩 高级桩 手写桩 Tessy单元测试之指针相关测试注意事项 有类型的指针&#xff08;非函数指针&#xff09;&#xff1a; 有类型的函数指针&#xff1a; void 类型的指针&#xff1a; 结语 前言 进行单元测试之后&#xff0c;但凡…

STM32技术打造:智能考勤打卡系统 | 刷卡式上下班签到自动化解决方案

文章目录 一、简易刷卡式打卡考勤系统&#xff08;一&#xff09;功能简介原理图设计程序设计 哔哩哔哩&#xff1a; https://www.bilibili.com/video/BV1NZ421Y79W/?spm_id_from333.999.0.0&vd_sourcee5082ef80535e952b2a4301746491be0 一、简易刷卡式打卡考勤系统 &…

数据在内存的存储(2)【浮点数在内存的存储】

一.浮点数以什么形式存储在内存中 根据根据国际标准IEEE&#xff08;电气和电子工程协会&#xff09;754&#xff0c;任意一个二进制浮点数V都可以存储为这样的形式&#xff1a; V&#xff08;-1&#xff09;^S*M*2^E。 &#xff08;1&#xff09;&#xff08;-1&#xff09;^…

[免费]通义灵码做活动,送礼品,快来薅羊毛!!!

你的编辑器装上智能ai编辑了吗&#xff0c;的确挺好用的。 最近阿里云AI编码搞活动&#xff0c;可以免费体验并且还可以抽盲盒。有日历、马克杯、代金券、等等其他数码产品。 大多数都是日历。 点击链接参与「通义灵码 体验 AI 编码&#xff0c;开 AI 盲盒」 https://develope…

蓝桥杯2023真题-幸运数字

目录 进制转换&#xff1a; 思路 代码 题目链接&#xff1a; 0幸运数字 - 蓝桥云课 (lanqiao.cn) 本题就考的进制转换问题&#xff0c;要将十进制5转换成二进制&#xff0c;通过%2,和/2的交替使用即可完成&#xff0c;所得余数就是转换成的二进制各位的值&#xff0c;转换…

SQLAlchemy操作数据库

数据库是一个网站的基础。 比如 MySQL 、 MongoDB 、 SQLite 、 PostgreSQL 等&#xff0c;这里我们以 MySQL为例进行讲解。 SQLAlchemy 是一个 ORM 框架 我们会以 MySQL SQLAlchemy 组合进行讲解。 在操作数据库操作之前&#xff0c;先确保你已经安装了以下两个插件&#…

继承-练习

T3、编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。要求&#xff1a; 定义乐器类Instrument&#xff0c;包括方法makeSound()定义乐器类的子类&#xff1a;二胡Erhu、钢琴Piano和小提琴Violin定义乐手类Musician&…

使用RN输入验证码(四个输入框)

先安装 yarn add react-native-confirmation-code-fieldRN代码 import React, { useState } from react; import { SafeAreaView, Text, StyleSheet, Dimensions } from react-native;import { CodeField, Cursor } from react-native-confirmation-code-field; const width …

Aurora IP的Framing帧接口和Streaming流接口

本文介绍Aurora IP配置时要选择的接口类型以及两种接口类型之前的区别。 Aurora IP接口有两种模式&#xff1a;Framing帧接口&#xff0c;Streaming流接口 目前一直在用的都是Framing帧接口。 Framing帧接口和Streaming流接口的主要区别是什么呢&#xff1f; 顾名思义&#x…

国内用户掌握ChatGPT,你已超越万人!

在数字时代&#xff0c;掌握前沿技术往往意味着拥有更多的机遇和可能。ChatGPT&#xff0c;作为当前最热门的人工智能技术之一&#xff0c;已经证明了其在各个领域的广泛应用价值。但在中国&#xff0c;能熟练使用ChatGPT的人究竟领先了多少人&#xff1f;让我们深入探讨。>…

【Git】日志功能

1. git日志显示 # 显示前3条日志 git log -3# 单行显示 git log --oneline# 图表日志 git log --graph# 显示更改摘要 git log --stat# 显示更改位置 git log --patch 或 git log -p# 查看指定文件的提交历史记录 git log {filename}例子1&#xff1a;单行显示 例子2&#xff…

2024年最新阿里云服务器价格表_CPU内存+磁盘+带宽价格

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

ManageEngine EventLog Analyzer: 功能丰富的日志分析工具

来自 Zoho Corp. 的 ManageEngine EventLog Analyzer 是一个小型应用程序&#xff0c;提供了许多功能。该产品采用无代理方式收集和分析机器生成的日志。该工具可以收集和规范化事件日志和机器数据&#xff0c;并在易于使用的基于 Web 的界面中提供分析、搜索、报告生成和存档等…

华院计算荣获CSDN“创新企业”和“年度创新产品与解决方案”大奖

日前&#xff0c;全国最大的专业开发者社区CSDN发布“2023中国开发者影响力年度榜单”&#xff0c;华院计算凭借其卓越的认知智能引擎平台荣获“创新企业”和“年度创新产品与解决方案”两项大奖。 CSDN 以数据为基础&#xff0c;经过个人或企业提交资料、层层筛选、深入调研、…

【Redis】数据类型、事务执行、内存淘汰策略

目录 数据类型 Redis事务执行步骤 步骤&#xff1a; redis内存淘汰策略 设置内存淘汰策略 1.设置配置文件 2.通过命令设置 数据类型 官网解释 Understand Redis data types | Redis 首先&#xff0c;Redis 的所有键都是字符串,常用的数据类型有 5 种&#xff1a;Strin…

SpringBoot整合WebService

WebService是一个SOA&#xff08;面向服务的编程&#xff09;的架构&#xff0c;它是不依赖于语言&#xff0c;不依赖于平台&#xff0c;可以实现不同的语言间的相互调用&#xff0c;通过Internet进行基于Http协议的网络应用间的交互。 其实WebService并不是什么神秘的东西&…

推荐一款电子翻页书制作软件

随着数字化时代的到来&#xff0c;电子书籍越来越受到人们的喜爱。而一款优秀的电子翻页书制作软件&#xff0c;则能够帮助你轻松制作出专业级的电子书&#xff0c;让你的阅读体验更加丰富多彩。 今天&#xff0c;我们就来为大家推荐一款优秀的电子翻页书制作软件——FLBOOK在线…