当前位置: 首页 > news >正文

spring-boot-maven-plugin插件 —— 打包时减小jar包的大小方法

Maven 在打包时会将所依赖的 jar 包全部打包进去,包含了所有的依赖和资源文件,就会导致打出来的包比较大。如果再上传服务器,那么耗时特别长。

由于依赖包变化小,占用空间大,而且大部分情况是添加一次后,就会很少去做调整;但每次修改代码,都需要重新把他们构建 jar 中去,往服务器上传、发布,生成大量的资源、带宽、时间的浪费。

于是通过 pom.xml 配置把 lib 和 jar 拆开,配置如下:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot-dependencies.version}</version><configuration><!-- 指定该jar包启动时的主类[建议] --><mainClass>com.xh.pack.PachApplication</mainClass><!--使用-Dloader.path需要在打包的时候增加<layout>ZIP</layout>,不指定的话-Dloader.path不生效--><layout>ZIP</layout><!--这里是填写需要包含进去的jar,必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来,如果没有则nothing ,表示不打包依赖 --><includes><include><!-- 排除所有Jar --><groupId>nothing</groupId><artifactId>nothing</artifactId></include></includes></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!--拷贝依赖到jar外面的lib目录--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.1.1</version><executions><!--导出所有的 jar 包--><execution><id>copy-dependencies</id><!-- 在实际打包中,执行任何的必要的操作。 --><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><!--指定的依赖路径--><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin></plugins>
</build>

这种方式打的包,在项目启动时,需要通过 -Dloader.path 指定 lib 的路径

java -Dloader.path=./lib -jar xxx.jar

如果引用的依赖是自己公司的其它模块或私有的依赖,那么就不宜打到外部的 lib,不然就会需要经常上传更新。可以使用保留依赖的方式把依赖文件打包到 jar 中。

补充

layout 配置与 META-INF/MANIFEST.MF 下的信息息息相关,配置关系如下:

JAR:即通常的可执行 jar。

Main-Class: org.springframework.boot.loader.JarLauncher

WAR:即通常的可执行war,需要的servlet容器依赖位于WEB-INF/lib-provided

Main-Class: org.springframework.boot.loader.warLauncher

ZIP:即DIR,类似于JAR

Main-Class: org.springframework.boot.loader.PropertiesLauncher

MODULE:将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher

NONE:将所有的依赖库打包,但是不打包Spring Boot的任何Launcher

http://www.lryc.cn/news/236719.html

相关文章:

  • java Bigdecimal
  • 【C++11并发】thread 笔记
  • OBS Studio免费开源录屏工具
  • 【汇编】[bx+idata]的寻址方式、SI和DI寄存器
  • Java,集合框架,关于Map接口与Collections工具类
  • 【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘
  • 二、什么是寄存器
  • 邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站
  • 学习UI第一天
  • 1688商品详情原数据(2023年11月最新版)
  • CleanMyMac X2024免费测试版好不好用?值不值得下载
  • Linux操作文件的底层系统调用
  • steam搬砖项目2023年现状分析,到底还能不能做?
  • 【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(二)
  • string类的常用方法
  • Java面向对象(高级)-- 单例(Singleton)设计模式
  • 【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步
  • 2311d导入c的语义不同
  • OpenHarmony Meetup北京站招募令
  • C语言——冒泡排序
  • 08.智慧商城——购物车布局、全选反选、功能实现
  • 金属压块液压打包机比例阀放大器
  • python 自动化福音,30行代码手撸ddt模块
  • 基于GATK流程化进行SNP calling
  • 【Java SE】如何解读Java的继承和多态的特性?
  • uniapp 手动调用form表单submit事件
  • 11月20日星期一今日早报简报微语报早读
  • Unity中 Start和Awake的区别
  • 进度条、git常见指令以及gdb的常用指令
  • ubuntu20编译安装pkg-config