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 和 配置文件相关推荐

  1. springboot 打jar 包部署时 读取外部配置文件

    案例:本文主要描述linux系统执行jar包读取jar包同级目录的外部配置文件 方法一:相对路径设置配置文件 (1)在jar包同级目录创建配置文件conf.properties并写入配置数据: con ...

  2. java原生和SpringBoot读取jar包中MANIFEST.MF的方式

    我们经常看到java的一些jar包META-INF目录下包含一个MANIFEST.MF文件,里面包含一些版本信息,标题,实现组织,很多第三方的jar包还会自定义一个属性. 本文讲解如何读取jar包中M ...

  3. 【SpringBoot】32、SpringBoot项目Jar包如何瘦身部署

    一.背景 SpringBoot 为我们快速开发提供了很好的架子,使得我们只需要少量配置就能开始我们的开发工作,但是当我们需要打包上传部署时,却是很神伤的一个问题,因为打出来的 Jar 包少则十几兆,多 ...

  4. Dockerfile文件创建centos:7,配置JDK8的环境变量,与运行springboot的jar包,的镜像

    DockerFile文件创建centos:7 配置JDK8的环境变量 与运行springboot的jar包 准备文件 一:官网下载Linux的JDK包 https://www.oracle.com/j ...

  5. [maven] springboot将jar包打包到指定目录

    大家好,我是烤鸭: 今天分享一下springboot将jar包打包到指定目录下. 由于之前上线都是一个打包到一个jar,由于服务多了,1个包100多M,哪怕是小版本上线都需要重新上传jar包. 1.目 ...

  6. springboot打jar包步骤

    springboot打jar包步骤: 方式一(maven打包): 方式二: 1. 选中Java项目工程名称,在菜单中选择 File->project structure... (快捷键Ctrl+ ...

  7. SpringBoot 打成jar包供第三方引用自动装配方案实现

    SpringBoot 打成jar包供第三方引用自动装配方案实现 每天多学一点点~ 话不多说,这就开始吧- 文章目录 SpringBoot 打成jar包供第三方引用自动装配方案实现 1.前言 2.使用者 ...

  8. 几个不错的java类、jar包及其依赖查找网站。。。

    为什么80%的码农都做不了架构师?>>>    开发过程中有时需要查找类对应的jar包及其依赖,并且要能够下载... 之前都是用的以下两个(第一个还是不错,第二个比较垃圾,很多都查不 ...

  9. 解决springboot读取jar包中文件的问题

    解决springboot读取jar包中文件的问题 参考文章: (1)解决springboot读取jar包中文件的问题 (2)https://www.cnblogs.com/songxiaotong/p ...

  10. jar构建docker镜像_dockerfile构建docker镜像详细说明,主要是springboot的jar包构建镜像样例...

    dockerfile构建docker镜像详细说明,主要是springboot的jar包构建镜像样例 1.镜像构建命令:docker build 图解 启动命令:(注意最后面有一个点,不要忘记) doc ...

最新文章

  1. iOS SwiftUI篇-2 UI控件 Text Button Image List
  2. 《用Python进行自然语言处理》第3章 加工原料文本
  3. iphone个系列尺寸_iPhone 12系列、11系列尺寸对比
  4. 1746: 多项式系数(杨辉三角的应用)
  5. [BUUCTF-pwn]——[OGeek2019]babyrop
  6. shell学习(12)- jq
  7. android 高音质 播放器,安卓音质最强音乐播放器—Rockbox
  8. UVA 10098 Generating Fast
  9. 【Flink实战系列】Lorg/apache/flink/kafka/shaded/org/apache/kafka/clients/consumer/ConsumerRecord;)Ljava/
  10. Win11系统电脑浏览器打开页面时显示无法访问此页面
  11. 神经网络训练不起来,怎么办?
  12. 微信网页授权获取用户昵称中文乱码
  13. Python:实现字符串Z 函数或 Z 算法(附完整源码)
  14. xamarin android网络请求总结
  15. 计算机图形学中的曲线问题
  16. 烟气脱硫技术及工艺流程超全剖析
  17. 2021年全球气动设备收入大约337.6百万美元,预计2028年达到365.7百万美元
  18. word中出现表格错乱 ,从别的文档里面复制过来的(或者自己建表格时)表格总是格式错乱
  19. leetcodeMysql练习记录(一)
  20. 调整B站视频播放速度

热门文章

  1. 远程运维方案选型指南:官网可下载的ZStack私有云平台 | 凌云时刻
  2. ZStack GPU解决方案
  3. 【语音识别】基于matlab说话人识别系统【含Matlab源码 1704期】
  4. 【瑕疵检测】基于matlab GUI OTSU织物疵点检测【含Matlab源码 860期】
  5. 【图像分割】基于matlab GUI FCMKFCM MRI图像分割【含Matlab源码 582期】
  6. 游戏世界观构建_我们如何构建技术落后的世界
  7. 点击量作弊真的可以检测吗_作弊道德可以使自动驾驶汽车可行吗?
  8. word怎么把页面顺序倒过来_Word打印错乱——出现两个第1页
  9. python:sklearn 标签编码(LabelEncoder)
  10. 软考 2015年下半年卷 错题知识点记录