使用maven快速生成打包文件3
这里再介绍一种打包方式,依赖包分开打包,直接将需要部署的文件打包成一个要锁文件,比如kafka-roma-bin.tar.gz,这里需要两个文件,一个pom2.xml,一个package.xml。
pom2.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version><relativePath/></parent><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>kafka-roma</artifactId><version>1.0</version><name>kafka-roma</name><description>kafka-roma</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><maven.test.skip>true</maven.test.skip></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.52</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><addMavenDescriptor>false</addMavenDescriptor><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>org.example.roma.KafkaRomaApplication</mainClass></manifest><manifestEntries><Class-Path>config/</Class-Path></manifestEntries></archive><excludes><classesDirectory>${project.basedir}/src/main/resources/</classesDirectory><exclude>*.properties</exclude><exclude>*.xml</exclude><exclude>*.yml</exclude></excludes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><descriptors><descriptor>${project.basedir}/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.8</version><executions><execution><id>deploy</id><phase>package</phase><goals><goal>run</goal></goals><configuration><target><untar src="${project.build.directory}/${project.name}-bin.tar.gz" dest="${project.build.directory}" overwrite="true" compression="gzip"/></target></configuration></execution></executions></plugin></plugins></build></project>
注意这里采用(没有使用dependencyManagement,主要原因是使用dependencyManagement时,无法拷贝指定版本的依赖,比如pom文件中提到的kafka-clients,这里需要2.7.2的版本,但是使用dependencyManagement后,打包的版本一直是3.0.2,这个问题后面再研究一下)
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version><relativePath/>
</parent>
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><addMavenDescriptor>false</addMavenDescriptor><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>org.example.roma.KafkaRomaApplication</mainClass></manifest><manifestEntries><Class-Path>config/</Class-Path></manifestEntries></archive><excludes><classesDirectory>${project.basedir}/src/main/resources/</classesDirectory><exclude>*.properties</exclude><exclude>*.xml</exclude><exclude>*.yml</exclude></excludes></configuration>
</plugin>
这里采用maven-jar-plugin打包,需指定启动类,打包的路径以及需要排除的文件
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><descriptors><descriptor>${project.basedir}/package.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions>
</plugin>
根据package.xml生成压缩文件
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.8</version><executions><execution><id>deploy</id><phase>package</phase><goals><goal>run</goal></goals><configuration><target><untar src="${project.build.directory}/${project.name}-bin.tar.gz" dest="${project.build.directory}" overwrite="true" compression="gzip"/></target></configuration></execution></executions>
</plugin>
将生成的压缩文件进行解压,根据个人需要,这部分可以去掉。
package.xml
<assembly><id>bin</id><formats><format>tar.gz</format></formats><dependencySets><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib</outputDirectory><unpack>false</unpack></dependencySet></dependencySets><fileSets><fileSet><directory>${project.basedir}</directory><outputDirectory></outputDirectory><includes><include>README*</include><include>LICENSE*</include><include>NOTICE*</include></includes></fileSet><fileSet><directory>${project.basedir}/src/main/resources/</directory><outputDirectory>config</outputDirectory><includes><include>**/*.xml</include><include>*.yml</include><include>*.properties</include></includes></fileSet><fileSet><directory>${project.basedir}/src/main/bin/</directory><outputDirectory>bin</outputDirectory><includes><include>start.sh</include><include>stop.sh</include></includes></fileSet><fileSet><directory>${project.basedir}/src/main/bin/</directory><outputDirectory></outputDirectory><includes><include>run.bat</include><include>run.sh</include></includes></fileSet><fileSet><directory>${project.basedir}/cert/</directory><outputDirectory>cert</outputDirectory><includes><include>*.jks</include><include>*.crt</include></includes></fileSet><fileSet><directory>${project.build.directory}</directory><outputDirectory></outputDirectory><includes><include>*.jar</include></includes></fileSet></fileSets>
</assembly>
这里的配置配置比较简单,基本一看就知道,主要是设定打包的各个目录的文件构成。
打包
执行mvn clean package -f pom2.xml即可。
相关文章:
使用maven快速生成打包文件3
这里再介绍一种打包方式,依赖包分开打包,直接将需要部署的文件打包成一个要锁文件,比如kafka-roma-bin.tar.gz,这里需要两个文件,一个pom2.xml,一个package.xml。 pom2.xml <?xml version"1.0&q…...
Excel技巧(一)
快捷键技巧 原文链接 选取某一行的数据直到最后一行:【CTRL SHIFT ↓ 】或者选取一行后按住SHIFT键,双击下边线就可以快速选取区域。 如果表格中有多行空行,可以先按CTRL SHIFT END,再按CTRL SHIFT 上下键调整,…...
C语言:文件复制
文本文件复制: #include<stdio.h>int main() {FILE* pFile1 NULL;FILE* pFile2 NULL;fopen_s(&pFile1,"D:\\11111.txt","r");fopen_s(&pFile2,"D:\\222.txt", "w");char c;while((cfgetc(pFile1))!EOF){f…...
谈谈建筑项目管理:类型、流程和工具
无论是在材料采购还是供应商管理方面,确保建筑项目按计划进行并控制在预算内始终是一项挑战。 如今,建筑项目管理正逐步采用软件驱动的方法来提升其效率。这一转型显著优化了项目规划、调度和资源配置,使建筑管理更加精确和高效。 什么是建…...
【Vue】生命周期函数
系列文章目录 第五章 生命周期函数 文章目录 系列文章目录 生命周期函数代表的是Vue实例,或者是Vue组件,在网页中各个生命阶段所执行的函数。生命周期函数可以分为创建阶段、挂载阶段、更新阶段以及卸载阶段。 创建阶段:setup挂载阶段&…...
C++系列-文件操作
文件操作 文件类型文本文件二进制文件 文件操作的三大类文件的打开方式ios::app(append)和 ios::ate(at end) 写文件写文件文件步骤读文件文件步骤二进制文件读写写一般数据写特殊数据 程序运行时产生的数据都属于临时数据,一旦程序运行完毕,就会释放&am…...
ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南
目录 全面掌握:JavaScript解构赋值的终极指南 一、数组解构赋值 1、基本用法 2、跳过元素 3、剩余元素 4、默认值 二、对象解构赋值 1、基本用法 2、变量重命名 3、默认值 4、嵌套解构 三、复杂的嵌套结构解构 四、函数参数解构赋值 1、对象解构作为函…...
2-73 基于matlab的weber能量法求解齿轮时变啮合刚度的程序
基于matlab的weber能量法求解齿轮时变啮合刚度的程序,能够跑出刚度图,通过求解轮齿部分变形、基体变形及局部接触变形这三部分的变形,进而求得综合弹性变形,最终求出时变啮合刚度。程序已调通,可直接运行。 2- 73 齿轮…...
[C++]set和map的介绍及使用
关于set和map的接口函数部分,只重点介绍一些相较于别的容器有特殊地方的接口,set和map的接口可以触类旁通。 一、概念 (一)、关联式容器 关联式容器存储的元素是一个个的键值对<key,value>。通过键(key&#x…...
【MySQL】MySQL学习笔记(持续更新)
1. 安装MySQL(windows环境) (1)在http://www.mysql.com下载*.msi的安装文件,并运行安装: 如:mysql-installer-community-8.0.39.0.msi 全部安装包含如下内容: …...
ArcGIS如何将投影坐标系转回为地理坐标系
有时候两个数据,一个为投影坐标系,另一个为地理坐标系时,在GIS软件中位置无法叠加到一起,这需要将两个或多个数据的坐标系统一,可以直接将地理坐标系的数据进行投影,或将投影坐标系转为地理坐标系。下面介绍…...
Parallels Desktop 19 for Mac 安装虚拟机需要激活吗
Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机,并于其中装设不同的操作系统,如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时,您可在 …...
wps题注为表格或图片编号
word中为表格添加题注: 问题:多次或多人编辑导致--序号不能联动更新(域代码不一致,如图) 所以是否可以批量替换word里的域代码?如果可以这问题就解决了————失败 解决办法: 如图,复制表头&…...
集成测试怎么做?
任何产品想要长期保持高质量运行,集成测试正是实现这一目标必不可少的工具。 本文重点介绍集成测试实现的流程,而非测试工具本身。我们的目的是聚焦于创建测试过程中你可能遇到的问题,以便你能自主地推进工作。 缺陷的成本 细节决定成败&a…...
java mybatis 使用work id
在 MyBatis-Plus 中,如果你想要使用 WORK_ID 作为 ID 生成策略的一部分,通常是指使用雪花算法(Snowflake Algorithm)的一种变体来生成全局唯一 ID。雪花算法能够生成一个递增的 64 位整数作为 ID,这种 ID 在分布式系统…...
MySQL 的子查询(Subquery)
在数据库查询中,有时候我们需要从一个查询的结果集中获取数据,再将这些数据作为另一个查询的一部分来使用。MySQL 提供了子查询(Subquery)这一强大工具,帮助我们实现嵌套查询,从而解决复杂的数据检索需求。…...
后端Web之数据库(以MySQL为例)
目录 1.概述 2.MySQL 3.DDL 4.DML 5.DQL 1.概述 对于我们自己写的一些小功能,数据一般存储在文件中,比如XML文件。而在实际项目中,数据都是存放在数据库中的。数据库(DataBase )是一个存储数据的集合,…...
委托发布 | 进迭时空联合移动云能力中心实现业界首个RISC-V IO虚拟化方案
仟江水商业电讯(8月22日 北京 委托发布)虚拟化是云计算技术基石,是RISC-V走进云计算等高性能计算场景的必然要求。RISC-V国际基金会2021年制定了Hypervisor 1.0规范,2023年制定了AIA 1.0规范和IOMMU 1.0规范,这3个规范…...
3-Electron打开新窗口,并跳转到指定的路由
需要配置路由。src/router/index.js {path: "/selectMode",name: "selectMode",component: () > import("//view/selectMode/index.vue"),},src/**.vue import { ipcRenderer } from "electron";const openNewTab () > {let p…...
comfyUI和SD webUI都有哪些差别呢?
ComfyUI和SD WebUI都是用于AI绘画的用户界面,它们各自有着不同的特点和适用场景。以下是两者之间的一些关键差别: 1、用户体验与界面友好性: SD WebUI(Stable Diffusion Web User Interface)以其直观易用著称,特别受初…...
PingCraft:从需求文档到可追踪工作项的 Agent 实践之路固
整体排查思路 我们的目标是验证以下三个环节是否正常: 登录成功时:服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端:浏览器是否成功接收并存储了该Cookie。 后续请求:浏览器在执行查询等操作…...
javaSE之图书管理系统
思路:一个图书管理系统项目的构建本次的代码是实现一个图书管理系统要求,有登入系统和用户选择系统,之后还有用户操作交换系统,和图书管理系统,具体思路如下创建以下类,加粗部分为包test:Testbo…...
AI 编程盛行的时代,为什么 “『DC- WFW』” 仍然具有必要性?淄
这,是一个采用C精灵库编写的程序,它画了一幅漂亮的图形: 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...
计算机毕业设计:Python城市空气污染智能分析系统 Django框架 可视化 数据分析 Prophet时间序列 大数据 大模型 深度学习(建议收藏)✅
1、项目介绍 技术栈 采用 Python 语言开发,基于 Django 框架搭建后端服务,前端使用 Echarts 实现数据可视化,结合 HTML 构建页面结构,运用 Prophet 时间序列算法模型进行空气质量预测。 功能模块系统主页综合评估分析分布与…...
ROS 2传感器数据融合入门:手把手教你用Python同步处理摄像头图像和激光雷达点云
ROS 2多传感器数据融合实战:基于Python的视觉-激光时空同步技术 在移动机器人感知系统开发中,摄像头和激光雷达的组合堪称经典配置——前者提供丰富的纹理和颜色信息,后者则能精确测量物体距离。但当你尝试同时使用这两种传感器时,…...
LVGL实战解析:Display、Screen与Layer的协同与层级管理
1. Display:物理显示接口的实战理解 第一次接触LVGL的Display概念时,我误以为它和电脑显示器是同一个东西。实际在嵌入式开发中,Display更像是一个抽象的数据通道——它连接着LVGL的图形系统和物理显示设备。举个例子,我在STM32F7…...
【LeetCode刷题日记】:从 LeetCode 经典题看哈希表的场景化应用---数组、HashSet、HashMap 选型与算法实战
🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...
我用 AI 辅助开发了一系列小工具():文件提取工具挖
从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...
SIP协议(四) - 注册流程中的挑战与响应机制详解
1. SIP注册流程中的挑战与响应机制 第一次接触SIP协议时,很多人都会被它的注册流程搞得一头雾水。明明发送了REGISTER请求,服务器却返回401错误,这到底是怎么回事?其实这正是SIP协议中经典的"挑战-响应"鉴权机制在发挥作…...
打破千篇一律的死胡同:调问网「逻辑配置」功能全解析
调问自开源以来一直坚持前后端所有代码 100% 开源 ,助力企业建设属于自己的问卷调研系统 。官网地址:https://www.diaowen.net在线服务:https://www.surveyform.cn源码下载:https://gitee.com/wkeyuan/DWSur无论是在进行精细化的客…...
