SpringBoot的maven项目自定义打包结构

文章目录

  • 1. 背景
  • 2. 自定义打包结构
  • 3. 打包结果

在这里插入图片描述


1. 背景

加入新团队,发现项目打包后只有一个大大的jar包,每次修改了一个模块的代码,都要整个上传。效率低还浪费流量呢,哈哈。假如每次修改一个模块的一点代码,单独打包该模块,然后单独上传并替换这个模块,这样就好多了。

于是,我们就需要对项目的打包结构进行自定义。对打包结构自定义的方式有多种,比如使用assembly,也可以使用今天我介绍的这个方法。

2. 自定义打包结构

我们在打包的时候,可以将配置文件、其他静态资源文件、jar包分开,便于我们平时的维护。

在启动模块的pom文件中添加如下内容即可:

    <!-- 定义打包后的文件存放位置,一般为项目名 --><properties><package.path>${project.build.directory}/${project.artifactId}</package.path></properties><build><plugins><!-- 开始处理启动模块jar包, --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><!--在启动模块的jar中排除以下文件类型,这是为了避免启动模块jar和后续的config目录下存在两份相同资源文件从而导致项目无法重启--><excludes><exclude>**/*.yml</exclude><exclude>**/*.txt</exclude></excludes><archive><manifest><!-- 执行的主程序路径 --><mainClass>com.tcm.syndrome.scale.TcmSyndromeScaleApplication</mainClass><!--是否要把第三方jar放到manifest的classpath中--><addClasspath>true</addClasspath><!--生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/--><classpathPrefix>../lib/</classpathPrefix><!-- 打包时 MANIFEST.MF 文件不记录的时间戳版本 --><useUniqueVersions>false</useUniqueVersions></manifest><manifestEntries><!-- 在 Class-Path 下添加配置文件的路径 --><Class-Path>../config/</Class-Path></manifestEntries></archive><!-- 将启动模块的jar包也输出到对应的lib下 --><outputDirectory>${package.path}/lib/</outputDirectory></configuration></plugin><!-- 开始处理依赖包,将所有资源文件拷贝到${package.path}/lib下 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${package.path}/lib/</outputDirectory></configuration></execution></executions></plugin><!-- 开始处理资源文件,将所有资源文件拷贝到${package.path}/config下 --><plugin><artifactId>maven-resources-plugin</artifactId><executions><execution><id>copy-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><!--把配置文件打包到指定路径--><resource><directory>src/main/resources/config</directory></resource></resources><outputDirectory>${package.path}/config</outputDirectory></configuration></execution><!--copy 脚本,把bin目录下的文件复制到,打包目录下, 这些都是自定义的,需要打包什么到什么文件夹就自己定义即可 --><execution><!-- 自定义 --><id>copy-bin</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/resources/bin/</directory></resource></resources><outputDirectory>${package.path}/bin</outputDirectory></configuration></execution><execution><!-- 自定义 --><id>copy-alg</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/resources/alg/</directory></resource></resources><outputDirectory>${package.path}/alg</outputDirectory></configuration></execution><execution><!-- 自定义 --><id>copy-doc</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/resources/doc/</directory></resource></resources><outputDirectory>${package.path}/doc</outputDirectory></configuration></execution><execution><id>copy-font</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><resources><resource><directory>src/main/resources/font/</directory></resource></resources><outputDirectory>${package.path}/font</outputDirectory></configuration></execution></executions></plugin></plugins><finalName>${project.artifactId}</finalName></build>

3. 打包结果

通过以上的配置后,即可完成打包结构的自定义。我的打包结构如下图:
在这里插入图片描述

参考文章:SpringBoot多模块项目打包分离lib包与配置文件

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

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

相关文章

RLHF(从人类反馈中进行强化学习)详解(三)

在经过了前两节的内容学习之后&#xff0c;我们对于RLHF&#xff08;从人类反馈中进行强化学习&#xff09;有了比较深入的认知&#xff0c;并且初步了解了RLHF中偏好数据集的引入&#xff0c;奖励模型的设置以及baseLLM的训练过程。在本节的学习中&#xff0c;我们将深入LLM的…

【ssh命令】ssh登录远程服务器

命令格式&#xff1a;ssh 用户名主机IP # 使用非默认端口: -p 端口号 ssh changxianrui192.168.100.100 -p 1022 # 使用默认端口 22 ssh changxianrui192.168.100.100 然后输入密码&#xff0c;就可以登录进去了。

Java使用GDAL来解析KMZ及KML实战

目录 前言 一、在GQIS中浏览数据 1、关于空间参考 2、属性表格 二、GDAL的相关驱动及解析实战 1、GDAL中的KMZ驱动 2、GDAL实际解析 三、数据解析成果 1、KML解析结果 2、KMZ文件入库 四、总结 前言 在前面的博客中讲过纯Java实现Google地图的KMZ和KML文件的解析&…

问题:歌剧序曲是用什么曲式写成? #学习方法#其他#经验分享

问题&#xff1a;歌剧序曲是用什么曲式写成&#xff1f; A、贝多芬 B、海顿 C、肖邦 D、莫扎特 参考答案如图所示

天诚公租房、人才公寓NB-IOT人脸物联网智能门锁解决方案

近期&#xff0c;全国已有超70城推出商品房“以旧换新”。各地商品房“以旧换新”主要采取国企收购、市场联动、税费补贴三种模式&#xff0c;二手房和新房市场交易活跃度均有提升。 一、人才公寓掀起建设浪潮 事实上&#xff0c;旧房被收购后将被纳入保障性租赁住房&#xf…

【MySQL数据库】my.ini文件参数中文注释

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

【调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持】

调试笔记-系列文章目录 调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持 文章目录 调试笔记-系列文章目录调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试…

片机+ISD1760智能家用语音唤醒系统设计

在节奏过快的生活中,人们承受的精神和心理压力十分巨大,这就使得现代人都希望在当代繁忙而枯燥的工作和学习中能身心愉悦的生活。随着信息化发展水平的逐步提高,智能化系统越来越受到人们的重视。市场上普遍的闹钟只是一种到了人们设定的时间就被令人烦躁的声音而吵醒的机械化…

【Redis】Redis主从复制(一)————主从搭建

目录 背景主从复制主从复制的工作流程主从复制的优点 配置 redis 主从结构复制配置文件&#xff0c;修改配置主从结构启动 redis 服务备注 查看复制状态 背景 单节点服务器的问题问题&#xff1a; 可用性&#xff1a;如果这个机器挂了&#xff0c;意味着服务就中断了.性能&am…

重回1990短视频全集:成都鼎茂宏升文化传媒公司

重回1990短视频全集&#xff1a;时光之旅的温情回顾 在数字技术的浪潮中&#xff0c;短视频以其独特的魅力迅速崛起&#xff0c;成为我们记录生活、分享故事的新方式。而当我们回望过去&#xff0c;那些充满怀旧情怀的年份总是让人心生感慨。今天&#xff0c;就让我们一起踏上…

JavaScrip轮播图

前言 在网页设计中&#xff0c;轮播图&#xff08;Carousel&#xff09;已经成为一种常见的元素&#xff0c;用于展示一系列的图片或内容卡片。它们不仅能够吸引用户的注意力&#xff0c;还能节省空间&#xff0c;使得用户可以在有限的空间内获得更多的信息。今天&#xff0c;我…

承德露露“不进则退”的十年:毛利率持续下滑,如何实现南北通喝?

《港湾商业观察》廖紫雯 日前&#xff0c;承德露露发布2023年年报及2024年一季报&#xff0c;披露营收、净利均取得一定增长的大好局面&#xff0c;然而时间线拉长来看&#xff0c;2014年、2015年&#xff0c;公司营收已超27亿&#xff0c;小十年时间过去&#xff0c;公司2023…

flask_sqlalchemy时间缓存导致datetime.now()时间不变问题

问题是这样的&#xff0c;项目在本地没什么问题&#xff0c;但是部署到服务器过一阵子发现&#xff0c;这个时间会在某一刻定死不变。 重启uwsgi后&#xff0c;发现第一条数据更新到了目前最新时间&#xff0c;过了一会儿再次发送也变了时间&#xff0c;但是再过几分钟再发就会…

RE_Python

python的exe文件解包 要确保使用工具的环境是和Python version一样&#xff08;我这里是需要3.11&#xff09; 不然&#xff0c;ezpy.exe_extracted文件夹点进去&#xff0c;类似PYZ-00.pyz_extracted的文件夹会是空的&#xff01;&#xff01; pyc反编译问题 ImportError:…

如何执行VMware P2V迁移|VMware Converter和替代方案

VMware中的P2V是什么&#xff1f; 我们常说的VMware P2V其实指的就是“物理到虚拟”&#xff0c;将工作负载从物理机器转换或迁移到虚拟机&#xff08;VM&#xff09;的过程&#xff0c;能够使您无需从头开始费力地创建和配置新虚拟机。 就像您可以使用Disk2vhd执行Hyper-V物理…

关闭文件及使用with语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 关闭文件 打开文件后&#xff0c;需要及时关闭&#xff0c;以免对文件造成不必要的破坏。关闭文件可以使用文件对象的close()方法实现。close()方…

C++青少年简明教程:C++函数

C青少年简明教程&#xff1a;C函数 C函数是一段可重复使用的代码&#xff0c;用于执行特定的任务&#xff0c;可以提高代码的可读性和可维护性。函数可以接受参数&#xff08;输入&#xff09;并返回一个值&#xff08;输出&#xff09;&#xff0c;也可以没有参数和返回值。 …

嵌入式Linux系统编程 — 2.4 标准I/O库:I/O缓冲详解

目录 1 I/O 缓冲简介 1.1 什么是I/O 缓冲 1.2 I/O 缓冲的目的 2 文件 I/O 的内核缓冲 3 刷新文件 I/O 的内核缓冲区 3.1 什么是刷新文件 I/O 的内核缓冲区 3.2 控制文件 I/O 内核缓冲的系统调用函数 3.3 示例程序 4 控制文件 I/O 内核缓冲的标志 4.1 O_DSYNC 和 O_SY…

(深度学习记录)第TR4周:Pytorch复现Transformer

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 &#x1f3e1;我的环境&#xff1a; 语言环境&#xff1a;Python3.11.4编译器&#xff1a;Jupyter Notebooktorcch版本&#xff1a;2.0.…

fastadmin/thinkPHPQueue消息队列详细教程

thinkphp-queue 是thinkphp 官方提供的一个消息队列服务,它支持消息队列的一些基本特性: 消息的发布,获取,执行,删除,重发,失败处理,延迟执行,超时控制等队列的多队列, 内存限制 ,启动,停止,守护等消息队列可降级为同步执行1、通过composer安装thinkPHP消息队列 …