如何利用maven更优雅的打包

news/2025/2/7 4:37:32/

最近在客户现场部署项目,有两套环境,无法连接互联网,两套环境之间也是完全隔离,于是问题就来了,每次都要远程到公司电脑改完代码,打包,通过网盘(如果没有会员,上传下载慢)或者远程工具传输,再用u盘拷贝到客户电脑,一个包400多Mb(所有的代码和依赖包以及配置文件都打在了一个jar包里面),传输一次10分钟,效率太低了,于是翻越资料找到一中更优雅的打包方式,每次只需要更新改过的包和配置文件即可,大大减少传输大小。

我们先看看nacos的压缩包解压开来的效果:

可以看到是一种很标准的打包方式,解压开来的文件夹都能够见名知意,下面是我改完maven打包方式之后的效果,实际过程中,也可以根据需要把脚本放到bin目录里面,只是我图简单,把停止和启动都写在了一个脚本里面,这么打包的好处是,后续改了代码和配置只需要替换相应的jar包和配置文件即可,而不用全量更新,我们自己写的代码jar包通常都是kb单位,远程桌面传输起来也很快:

conf:配置文件目录里面包含了logback配置文件,项目依赖的application.yml等配置文件:

lib:依赖的jar,包括第三方依赖包和自己项目里面的common,api等:

gisadmin-boot.jar:springboot启动类所在的jar包,start.sh启动脚本里面启动命令指定的就是这个jar

start.sh:启动脚本:

ps -ef | grep gisadmin-boot | grep -v grep | awk '{print $2}' | xargs -r kill -9# 等待几秒以确保进程被正确杀死
sleep 2# 确保日志目录存在
mkdir -p ./logs# 绝对路径启动 Java
nohup java -Duser.timezone=Asia/Shanghai -Dfile.encoding=utf-8 -cp ./gisadmin-boot.jar com.daspatial.gis.EarthApplication  > ./logs/gisadmin.log 2>&1 &sleep 2

下面就是关键的maven配置了(只写关键变更部分):

1、不同的环境,激活不同的配置:在maven打包命令执行的时候指定,比如mvn clean compile package -Pdev -DskipTests,其中-Pdev就是激活dev环境的配置

    <profiles><profile><id>dev</id><properties><profileActive>dev</profileActive></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>wutiegaw</id><properties><profileActive>wutiegaw</profileActive></properties></profile><profile><id>wutie</id><properties><profileActive>wutie</profileActive></properties></profile><profile><id>prod</id><properties><profileActive>prod</profileActive></properties></profile></profiles>

2、build节点配置:

<build><!--最终打出来的包名--><finalName>${project.artifactId}</finalName><!--java代码源文件目录--><sourceDirectory>${basedir}/src/main/java</sourceDirectory><!--资源文件目录,主要是配置文件,也就是src/main/resources目录--><resources><resource><directory>${basedir}/src/main/java</directory><filtering>true</filtering><excludes><exclude>**/*.java</exclude></excludes></resource><resource><directory>${basedir}/src/main/resources</directory><excludes><exclude>**/assembly.xml</exclude></excludes></resource><resource><directory>${basedir}/src/main/env/${profileActive}</directory></resource></resources><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifestEntries><!--配置文件独立输出到conf目录--><Class-Path>conf/</Class-Path></manifestEntries><manifest><!--依赖包独立输出到lib目录--><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix></manifest></archive><excludes><!--这里是为了防止配置文件被打进启动类所在的jar里面--><exclude>**/*.yml</exclude><exclude>**/*.xml</exclude></excludes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.6</version><configuration><appendAssemblyId>false</appendAssemblyId><descriptors><!--assembly插件配置文件--><descriptor>${basedir}/src/main/resources/assembly.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-deploy-plugin</artifactId><configuration><skip>true</skip></configuration></plugin></plugins></build>

3、assembly插件配置文件assembly.xml:

<?xml version="1.0"?>
<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"><id>${version}</id><formats><!-- zip,tar,tar.gz,tar.bz2,jar,dir,war --><format>tar.gz</format></formats><includeBaseDirectory>true</includeBaseDirectory><fileSets><fileSet><!--源代码中的bin目录输出到压缩包根目录--><directoryMode>0777</directoryMode><directory>${basedir}/src/bin</directory><fileMode>0777</fileMode><outputDirectory>.</outputDirectory><lineEnding>unix</lineEnding></fileSet><fileSet><!--激活的profile配置文件输出到conf目录--><directory>${basedir}/src/main/env/${profileActive}</directory><outputDirectory>conf</outputDirectory></fileSet></fileSets><files><file><!--logback配置文件输出到conf目录--><source>${basedir}/src/main/resources/logback.xml</source><outputDirectory>conf</outputDirectory></file><file><source>${basedir}/src/main/resources/banner.txt</source><outputDirectory>conf</outputDirectory></file><file><!--启动类jar输出到压缩包根目录--><source>${basedir}/target/${project.artifactId}.jar</source><outputDirectory>.</outputDirectory></file></files><dependencySets><dependencySet><useProjectArtifact>true</useProjectArtifact><outputDirectory>lib</outputDirectory><excludes><exclude>${project.groupId}:${project.artifactId}</exclude></excludes></dependencySet></dependencySets>
</assembly>

项目目录结构如下:

改完之后可能会出现spring无法加载配置文件,只需要右键选中dev环境加入到资源目录即可,也就是默认激活dev环境配置:


http://www.ppmy.cn/news/1569980.html

相关文章

PHP 中 `foreach` 循环结合引用使用时可能出现的问题

问题背景 假设你有如下 PHP 代码&#xff1a; <?php $arr array(1, 2, 3, 4);// 使用引用遍历并修改数组元素 foreach ($arr as &$value) {$value $value * 2; } // 此时 $arr 变为 array(2, 4, 6, 8)// 再使用非引用方式遍历数组 foreach ($arr as $key > $val…

arm-linux-gnueabihf安装

Linaro Releases windows下打开wsl2中的ubuntu&#xff0c;资源管理器中输入&#xff1a; \\wsl$gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 复制到/home/ark01/tool 在 Ubuntu 中创建目录&#xff1a; /usr/local/arm&#xff0c;命令如下&#xff1a; …

MySQL 索引原理

索引&#xff08;Index&#xff09;是 MySQL 用来提高查询效率的数据结构。索引的核心原理是 通过减少数据扫描的范围&#xff0c;提高查询性能。索引类似于一本书的目录&#xff0c;可以加快查找的速度。 1. 索引的底层数据结构 MySQL 主要使用两种索引数据结构&#xff1a;…

python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算

【0】基础定义 按位与运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;全1取1&#xff0c;其余取0。 按位或运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;有1取1&#xff0c;其余取0。 按位异或运算&#xff1a; 两个等长度二进制数上下对齐&#xff0c;相…

C_位运算符及其在单片机寄存器的操作

C语言的位运算符用于直接操作二进制位&#xff0c;本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。 一、位运算符的简单说明 1、按位与运算符&#xff08;&&#xff09; 功能&#xff1a;按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制…

中国城商行信贷业务数仓建设白皮书(第一期:总体规划)

一、项目背景与行业现状 1.1 国内城商行信贷业务痛点 2024年统计数据显示:全国134家城商行平均历史数据处理延迟达37小时/次 传统Oracle架构日均处理能力上限仅为320万笔交易 客户特征维度不足(现行系统平均维护86个客户标签) 监管报表生成耗时超同业股份制银行2.3倍 1.2 H…

代码随想录二刷|回溯1

回溯 组合问题 方法 组合 题干 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路 &#xff08;1&#xff09;定义全局变量数组&#xff0c;作为存放组合的数组和存放最终答案的数组 &#xff08;2&…

二叉树03(数据结构初阶)

文章目录 一&#xff1a;实现链式结构二叉树1.1前中后序遍历1.1.1遍历规则1.1.2代码实现 1.2结点个数以及高度等1.2.1二叉树结点个数1.2.2二叉树叶子结点个数1.2.3二叉树第k层结点个数1.2.4二叉树的深度/高度1.2.5 二叉树查找值为x的结点1.2.6二叉树的销毁 1.3层序遍历1.4判断是…