springboot jar thin

springboot 应用 jar 瘦身。springboot jar 太大。jar与依赖包分离。

两种方法,第一种,spring-boot-thin-launcher,他将依赖包以maven仓库的形式放到repository目录。

第二种,将依赖包以jar包的方式放到一个目录下,比如libs目录。

spring-boot-thin-launcher

这种方式是将jar所以依赖的项,从本地中找(比如windows系统,c:/Users/keboom/.m2),如果没有通过pom文件中的指定的maven仓库下载到默认${user.home}/.m2文件夹。下载到的位置可以通过thin.root指定,可以看下文,或者下文中GitHub中的详细文档。

springboot 依赖配置区别

https://www.cnblogs.com/niceboat/p/6230448.html

注意自己项目用的是spring-boot-dependencies还是spring-boot-starter-parent

如果是spring-boot-dependencies,那么需要写executions---goals---repackage

如果是spring-boot-starter-parent,那么可以试试廖雪峰的来做廖雪峰springboot jar 瘦身

            <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.14</version>
<type>pom</type>
<scope>import</scope>
</dependency> <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--如果用的是 spring-boot-dependencies ,那么需要配置 repackage -->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

用上面的maven打包,回获得一个几十甚至几百兆的包。这个包可以独立运行,因为依赖都打包的这个包里面了。

我们用spring-boot-thin-layout

            <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot.experimental</groupId>
<artifactId>spring-boot-thin-layout</artifactId>
<version>1.0.30.RELEASE</version>
</dependency>
</dependencies>
<!--如果用的是 spring-boot-dependencies ,那么需要配置 repackage -->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

我用的windows,maven 本地仓库放到d盘了,而且我的pom里面也没配中央仓库这些,我用的命令为:

java -Dthin.root=. -Dmaven.repo.local=D:\baseTool\mavenRepository -jar myapp.jar

thin.root会将依赖放到myapp.jar 同级目录repository中,maven.repo.local指定从本地maven位置

那么打包下来我是只有一百kb。

spring-boot-thin-launcher Github里面介绍了原理,和相关参数的作用。

将依赖的jar包copy到目录

第二种方式是,将依赖的jar包都放到一个文件夹下。

将spring-boot-maven-plugin插件删掉

添加一下两个插件

            <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/libs
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
<mainClass>
com.example.MyAppApplication
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

然后进行 mvn clean install,或者用idea的界面去点就好。

这样程序运行后会去libs目录找相应的依赖包。

两者区别

第一种在能够连接到公司maven仓库时可以使用。但有些项目是部署到客户私有云的,通过给客户升级包的方式升级应用,那么使用第二种方式就更好用,只需要替换相应的jar文件即可。

springboot jar thin的更多相关文章

  1. XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译

    XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...

  2. Linux下 SpringBoot jar项目后台运行、查看、停用

    运行java jar: nohup java -jar **-0.0.1-SNAPSHOT.jar & 查看进程: 采用top或者ps aux命令.一般 如果后台是springboot,jar ...

  3. linux环境下,springboot jar启动方式

    linux环境下,springboot jar启动方式 一.前台启动(ctrl+c会关掉进程) java -jar application.jar 二.后台启动(ctrl+c不会关闭) java -j ...

  4. 解决SpringBoot jar包太大的问题

    转载 2017年09月18日 09:21:53 577 SpringBoot的web应用一般都添加了spring-boot-maven-plugin插件. Maven xml代码   <buil ...

  5. Linux编辑启动停止重启springboot jar包脚本

    springboot的配置文件中,配置文件的名字都有各自的意义跟用途 dev 开发环境 prod 生产环境(默认) test 测试环境 加载指定配置文件 --spring.profiles.activ ...

  6. linux下SpringBoot Jar包自启脚本配置

    今天整理服务器上SpringBoot项目发现是自启的,于是想看看实现.翻看离职同事的交接文档发现一个***.service文件内容如下 [Unit] Description=sgfront After ...

  7. 170803、springboot jar包启动提示没有主清单属性

    问题:SpringBoot打包成jar后运行提示没有主清单属性 解决: 补全maven中的bulid信息 <plugin> <groupId>org.springframewo ...

  8. SpringBoot jar包不支持jsp

    官方原文如下: When running a Spring Boot application that uses an embedded servlet container (and is packa ...

  9. 使用winsw将spring-boot jar包注册成windows服务

    背景:最近的项目中使用spring-boot, https://github.com/kohsuke/winsw/releases <service> <id>YJPSS< ...

  10. 彻底透析SpringBoot jar可执行原理

    ​ 文章篇幅较长,但是包含了SpringBoot 可执行jar包从头到尾的原理,请读者耐心观看.同时文章是基于SpringBoot-2.1.3进行分析.涉及的知识点主要包括Maven的生命周期以及自定 ...

随机推荐

  1. vue中粘贴板clipboard的使用方法

    一.npm安装clipboard npm install clipboard --save 二.页面结构 <span id="copyTarget">{{targetC ...

  2. 2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow

    2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow ...

  3. Create Vite App 支持 OpenTiny 啦🎉

    大家好,我是 Kagol,个人公众号:前端开源星球. 一个月前,日日自新写了一篇介绍 Create Vite App 开源项目的文章: 基于vite 4.x 快速搭建开箱即用,高度可定制化模版脚手架 ...

  4. mac部署flutter时执行brew update无反应

    找来找去还是镜像的问题 1.替换brew 镜像 git remote set-url origin https://mirrors.ustc.edu.cn/ew.git 2.替换homebrew-co ...

  5. JavaScript模块化 之( Commonjs、AMD、CMD、ES6 modules)演变史

    经常在工作中使用define(['./modulename'],function(modulename){}),require(['modulename'],function(modulename){ ...

  6. 【python基础】复杂数据类型-列表类型(数值列表)

    1.数值列表 列表非常适合用于存储数字集合,而python提供了很多工具,可帮助我们高速地处理数字列表. 1.1 range函数 python的range函数能够轻松的生成连续一系列数字. 其语法格式 ...

  7. Go语言如何判断两个对象是否相等

    1. 引言 在编程中,判断两个对象是否相等是一项常见的任务,同时判断对象是否相等在很多情况下都非常重要,例如: 单元测试:编写单元测试时,经常需要验证函数的输出是否符合预期,这涉及到比较对象是否相等. ...

  8. 【Python爬虫】批量爬取网页的图片&制作数据集

            由于Python拥有强大且丰富的类库,语法简单,效率高而被广泛运用于网络爬虫,很多人都是通过爬虫认识Python.         因为小编最近正在做目标识别相关的项目,所以需要大量的 ...

  9. 如何从零开始构建 API ?

    假设你请承包商从零开始建造一座房子,你肯定期望他们交付最高质量的房子.他们必须通过检查.遵守安全规范并遵循项目中约定的要求.因为建房子可容不得走捷径.如果承包商经常走捷径,他们的声誉会受到影响,从而失 ...

  10. [Java SE] 彻底搞懂Java程序的三大参数配置途径:系统变量与JVM参数(VM Option)/环境变量/启动程序参数args

    0 序言 一次没搞懂,处处受影响.这个问题属于基础问题,但又经常踩坑,不得不重视一下了. 1 Java程序动态参数的配置途径:系统变量与JVM参数(VM Option) vs 环境变量 vs 启动程序 ...