springboot 打 jar 包分离依赖 lib 和 配置文件
springboot 打 jar 包分离依赖 lib 和 配置文件
前言
- 先前发布 boot 项目的时候,改动一点东西,就需要将整个项目重新打包部署,十分不便,故把依赖 lib 从项目分离出来,每次部署只需要发布代码即可。
半自动化步骤
步骤1,更换 maven 的 jar 打包插件
- 先前使用的是 spring-boot-maven-plugin 来打包
- 这个插件会将项目所有的依赖打入 BOOT-INF/lib 下
- 替换为 maven-jar-plugin
- addClasspath 表示需要加入到类构建路径
- classpathPrefix 指定生成的 Manifest 文件中 Class-Path 依赖 lib 前面都加上路径,构建出 lib/xx.jar
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>${maven-jar-plugin.version}</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>com.asiainfo.jtdp.Stat3rdMain</mainClass></manifest></archive></configuration>
</plugin>
步骤2,拷贝依赖到 jar 外面的 lib 目录
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>${maven-dependency-plugin.version}</version><executions><execution><id>copy-lib</id><phase>prepare-package</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>
步骤3: 在和 jar 包同级的目录下新建一个 config 目录,放入 application.yml 文件
这里可能有小伙伴有疑问了,打包的 jar 里面不是应该有 application.yml 文件吗,这里为什么再放一份?
这是因为 springboot 读取配置有一个优先级,放在jar包外面 config 目录优先级最高,主要是便于从外部修改配置,而不是改 jar 包中的 application.yml 文件。优先级如下:
- 当前目录的 config 目录下
- 当前目录
- classpath 的 config 目录下
- classpath 的根目录
步骤4:注意一个依赖的坑
通过 java -jar 的方式启动项目总是报如下错误:
ClassNotFoundException: org.springframework.boot.SpringApplication
后来发现时一个依赖的问题,问题详情可以见这个博客
-SpringBoot使用yaml作为配置文件之坑
<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId>
</dependency>
步骤5,愉快的启动项目
加入 --debug 可以让你可以看到比较详细的启动日志
java -jar xxx-1.0.0.jar --debug
全自动化步骤,我没懂,我没有搞成功
- 前面介绍的步骤中,需要手动的拷贝 application.yml 文件,并且 jar 包内外都存在配置,总感觉怪怪的(偷笑…)。这里引入一种自动化配置,将所有东西打成 zip 文件,直接发布到服务目录,解压后,即可启动。
自动化步骤1
- 还是同上面步骤1,2所示,指定打包插件和拷贝依赖的插件。
自动化步骤2
- 排除 resources 下面的 yml(因为我们需要把它放在 jar 外部,不能让 jar 打包插件将其打入 jar 包 classpath 下去)
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>${maven-jar-plugin.version}</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>com.asiainfo.jtdp.Stat3rdMain</mainClass></manifest></archive><!-- 排除配置文件 --><excludes><exclude>*.yml</exclude></excludes></configuration>
</plugin>
自动化步骤3,使用maven-assembly-plugin自定义打包
- 具体打包详情在assembly.xml配置中指定
<plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptors><descriptor>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>
- assembly.xml具体配置如下:
- 将 application.yml 放在外部 config 目录下
- 所有依赖打成 zip 压缩包
<assembly xmlns="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>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets><fileSet><directory>${basedir}/src/main/resources</directory><includes><include>*.yml</include></includes><filtered>true</filtered><outputDirectory>${file.separator}config</outputDirectory></fileSet><fileSet><directory>src/main/resources/runScript</directory><outputDirectory>${file.separator}bin</outputDirectory></fileSet><fileSet><directory>${project.build.directory}/lib</directory><outputDirectory>${file.separator}lib</outputDirectory><includes><include>*.jar</include></includes></fileSet><fileSet><directory>${project.build.directory}</directory><outputDirectory>${file.separator}</outputDirectory><includes><include>*.jar</include></includes></fileSet>
</fileSets>
</assembly>
自动化步骤4,解压zip,启动
- 美滋滋的自动化
springboot 打 jar 包分离依赖 lib 和 配置文件相关推荐
- springboot 打jar 包部署时 读取外部配置文件
案例:本文主要描述linux系统执行jar包读取jar包同级目录的外部配置文件 方法一:相对路径设置配置文件 (1)在jar包同级目录创建配置文件conf.properties并写入配置数据: con ...
- java原生和SpringBoot读取jar包中MANIFEST.MF的方式
我们经常看到java的一些jar包META-INF目录下包含一个MANIFEST.MF文件,里面包含一些版本信息,标题,实现组织,很多第三方的jar包还会自定义一个属性. 本文讲解如何读取jar包中M ...
- 【SpringBoot】32、SpringBoot项目Jar包如何瘦身部署
一.背景 SpringBoot 为我们快速开发提供了很好的架子,使得我们只需要少量配置就能开始我们的开发工作,但是当我们需要打包上传部署时,却是很神伤的一个问题,因为打出来的 Jar 包少则十几兆,多 ...
- Dockerfile文件创建centos:7,配置JDK8的环境变量,与运行springboot的jar包,的镜像
DockerFile文件创建centos:7 配置JDK8的环境变量 与运行springboot的jar包 准备文件 一:官网下载Linux的JDK包 https://www.oracle.com/j ...
- [maven] springboot将jar包打包到指定目录
大家好,我是烤鸭: 今天分享一下springboot将jar包打包到指定目录下. 由于之前上线都是一个打包到一个jar,由于服务多了,1个包100多M,哪怕是小版本上线都需要重新上传jar包. 1.目 ...
- springboot打jar包步骤
springboot打jar包步骤: 方式一(maven打包): 方式二: 1. 选中Java项目工程名称,在菜单中选择 File->project structure... (快捷键Ctrl+ ...
- SpringBoot 打成jar包供第三方引用自动装配方案实现
SpringBoot 打成jar包供第三方引用自动装配方案实现 每天多学一点点~ 话不多说,这就开始吧- 文章目录 SpringBoot 打成jar包供第三方引用自动装配方案实现 1.前言 2.使用者 ...
- 几个不错的java类、jar包及其依赖查找网站。。。
为什么80%的码农都做不了架构师?>>> 开发过程中有时需要查找类对应的jar包及其依赖,并且要能够下载... 之前都是用的以下两个(第一个还是不错,第二个比较垃圾,很多都查不 ...
- 解决springboot读取jar包中文件的问题
解决springboot读取jar包中文件的问题 参考文章: (1)解决springboot读取jar包中文件的问题 (2)https://www.cnblogs.com/songxiaotong/p ...
- jar构建docker镜像_dockerfile构建docker镜像详细说明,主要是springboot的jar包构建镜像样例...
dockerfile构建docker镜像详细说明,主要是springboot的jar包构建镜像样例 1.镜像构建命令:docker build 图解 启动命令:(注意最后面有一个点,不要忘记) doc ...
最新文章
- iOS SwiftUI篇-2 UI控件 Text Button Image List
- 《用Python进行自然语言处理》第3章 加工原料文本
- iphone个系列尺寸_iPhone 12系列、11系列尺寸对比
- 1746: 多项式系数(杨辉三角的应用)
- [BUUCTF-pwn]——[OGeek2019]babyrop
- shell学习(12)- jq
- android 高音质 播放器,安卓音质最强音乐播放器—Rockbox
- UVA 10098 Generating Fast
- 【Flink实战系列】Lorg/apache/flink/kafka/shaded/org/apache/kafka/clients/consumer/ConsumerRecord;)Ljava/
- Win11系统电脑浏览器打开页面时显示无法访问此页面
- 神经网络训练不起来,怎么办?
- 微信网页授权获取用户昵称中文乱码
- Python:实现字符串Z 函数或 Z 算法(附完整源码)
- xamarin android网络请求总结
- 计算机图形学中的曲线问题
- 烟气脱硫技术及工艺流程超全剖析
- 2021年全球气动设备收入大约337.6百万美元,预计2028年达到365.7百万美元
- word中出现表格错乱 ,从别的文档里面复制过来的(或者自己建表格时)表格总是格式错乱
- leetcodeMysql练习记录(一)
- 调整B站视频播放速度
热门文章
- 远程运维方案选型指南:官网可下载的ZStack私有云平台 | 凌云时刻
- ZStack GPU解决方案
- 【语音识别】基于matlab说话人识别系统【含Matlab源码 1704期】
- 【瑕疵检测】基于matlab GUI OTSU织物疵点检测【含Matlab源码 860期】
- 【图像分割】基于matlab GUI FCMKFCM MRI图像分割【含Matlab源码 582期】
- 游戏世界观构建_我们如何构建技术落后的世界
- 点击量作弊真的可以检测吗_作弊道德可以使自动驾驶汽车可行吗?
- word怎么把页面顺序倒过来_Word打印错乱——出现两个第1页
- python:sklearn 标签编码(LabelEncoder)
- 软考 2015年下半年卷 错题知识点记录