使用Springboot 打jar包实现分离依赖lib和配置
作者:带带大师兄啊 发布时间:2023-01-29 18:35:29
打jar包实现分离依赖lib和配置
为了业务需要配置文件和jar分离,便于使用者修改配置信息,在网上找了很久,最终找到一个简单有效的方法。
操作步骤
打开project工程的pom.xml文件,将下列配置粘贴到pom文件中:
<properties>
<java.version>1.8</java.version>
<!--在此配置打包输出的路径-->
<directory>d:/out/</directory>
</properties>
<build>
<plugins>
<!--上线部署 JAR启动分离依赖lib和配置-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<!--不打包资源文件-->
<excludes>
<exclude>*.**</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!--jar包不包含唯一版本标识-->
<useUniqueVersions>false</useUniqueVersions>
<!--程序启动类application.java的路径-->
<mainClass>com.sy.xx.Application</mainClass>
</manifest>
<!-- 指定配置文件目录,这样jar运行时会去找到同目录下的config文件夹下查找 -->
<manifestEntries>
<Class-Path>config/</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${directory}</outputDirectory>
</configuration>
</plugin>
<!--拷贝依赖 copy-dependencies-->
<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>
${directory}/lib/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!--拷贝资源文件 copy-resources-->
<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</directory>
<!-- 指定参与构建的resoures-->
<includes>
<include>*.**</include>
</includes>
</resource>
</resources>
<outputDirectory>${directory}/config</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
接下来使用maven package打包即可:
打包之后的样子:
这样就完成了配置文件以及lib包和jar的分离了,并且jar在运行的时候会默认去读取config文件夹中的配置,修改起来非常方便。
Springboot中jar包分离(分离lib包)
jar包分离介绍
springboot构建jar部署,通过使用 java -jar xxx.jar 命令启动服务,非常方便。
但是通过maven构建的jar包含 \BOOT-INF\lib\下的所有依赖jar包,导致jar包文件太大。
本文将lib文件夹下所依赖的jar包分离出来,解决文件过大问题。
jar包分离实施步骤
(1)按照正常的springboot项目打包方式,对项目进行打包package,其打包后目录如下:
|--META-INF
|--BOOT-INF
|--classes
|--lib
|--org
打完包后,进行解压。找到\BOOT-INF\lib文件夹,将lib文件夹复制出来,后续使用。
其中\BOOT-INF\lib目录下存放着所有的依赖jar包,ojdbc8-19.8.0.0.jar / lombok-1.18.16.jar / spring-boot-2.4.1.jar … 占用了大量的空间。jar包分离就是将其独立开来。
(2)通过修改pom.xml中的一部分配置,再次打包,此时打包的内容已经排除了其依赖的各种jar包。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--start-->
<configuration>
<!--这里对应项目的主入口-->
<mainClass>com.ityj.multidb.SpringbootMultiDatasourcesApplication</mainClass>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<!--end-->
</plugin>
1:直接重新打包,即可
2:如果通过命令:在idea工具中打入:mvn clean dependency:copy-dependencies -DoutputDirectory=target/lib package
两种方式打包都可以,最终的jar包已经排除掉了lib文件。推荐第一种方便快捷。
(3)将第一次打包提取出来的lib文件夹和第二次打的jar包放在同一个目录下,执行以下命令,启动项目:
java -jar -Dloader.path=./lib springboot-multi-datasources-0.0.1-SNAPSHOT.jar
小结一下
springboot项目什么都不用动,直接通过maven工具package打包,进行解压。并把\BOOT-INF\lib目录下的lib文件夹整个内容复制出来。(取出lib文件夹的内容)
在项目pom.xml中的plugin中加入以下内容,注意层级关系以及要把入口类改成对应的项目名。(start到end的内容)
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--start-->
<configuration>
<!--这里对应项目的主入口-->
<mainClass>com.ityj.multidb.SpringbootMultiDatasourcesApplication</mainClass>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<!--end-->
</plugin>
修改后再次package打包,这次的jar包就没有了依赖内容,文件较小。把生成的jar包放在与首次打包生成的lib文件夹同目录下。
执行启动脚本或者命令即可
java -jar -Dloader.path=./lib springboot-multi-datasources-0.0.1-SNAPSHOT.jar
来源:https://blog.csdn.net/qq_41579515/article/details/119562049


猜你喜欢
- 什么是TKMybatisTKMybatis 是基于Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKM
- 本文实例讲述了C#中文随机数实现方法。分享给大家供大家参考。具体如下:/// <summary>/// 随机中文码/// <
- 本文实例讲述了C#文件合并的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.IO;stri
- 前言小小知识,不值一提,了解了也不能让你提高身价,但是不了解你就是比别人少知道点!事儿就是这么个事儿,直接正题吧! 直接看代码演示优先级当方
- ListView是android中最常用的控件之一。 在实际运用中往往会遇到一次性加载全部数据过多,需要分页加载增加程序运行效率! 本dem
- 由于GitHub上面的zxing功能太多,有的用不到,我就抽取了重要的出来使用,这个可以生成二维码,扫描二维码和相册中的二维码Demo效果:
- 本文实例为大家分享了java实现发送邮箱验证码的具体代码,供大家参考,具体内容如下添加依赖<!-- 邮箱验证码 https://mvn
- 一、系统介绍本系统实现扑克的分发,抢地主,电脑自动出牌等功能。二、系统展示1.扑克分发2.抢地主3.出牌4.游戏胜利三、系统实现Card.j
- 需求:Android客户端连接服务器端MySQL数据库中的内容环境部署服务器:apache-tomcat-8.5.9语言版本:Java 1.
- 目录Web服务器技术讲解PHP:JSP/ServletWeb服务器IISTomcatJAVA jdk中的内容TomcatTomcat根目录下
- 前言:因为项目中显示图片是用Picasso,设置placeholder和error图片的时候发现,本地图片的大小无法满足我的需求,需要先对图
- 对象嵌套关联查询一对多List集合查询mybatis嵌套关联查询如下由于我的是一对集合查询,所以我有两个类。@Data@TableName(
- springmvc提供了 * ,类似于过滤器,他将在我们的请求具体出来之前先做检查,有权决定接下来是否继续,对我们的请求进行加工。 * ,可
- 实例如下:/** * 将一个list均分成n个list,主要通过偏移量来实现的 * @param source * @return */ p
- 本文实例讲述了Android开发实现的简单五子棋游戏。分享给大家供大家参考,具体如下:我刚刚在Android上写的一个五子棋的小程序,在这里
- 基于有了OO的基础后,开始认真学习设计模式!设计模式是java设计中必不可少的!Apple.javapackage strategy;/**
- 公司的研发管理平台实现了Gitlab+Kubernetes的Devops,在ToB和ToC场景中,由于用户量大,且预发布环境和生产环境或多或
- 本文源码:GitHub·点这里 || GitEE·点这里一、Ehcache缓存简介1、基础简介EhCache是一个纯Java的进程内缓存框架
- 本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP下面是使用AspectJ注解实现AOP的Java Projec
- 认识链表结构单向链表单链表在内存中的表示:可以看到,一个链表的节点包含数据域和指向下一个节点的引用,链表最后一个节点指向null(空区域)。