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. 2021-01-08:cpu和gpu有什么区别?

    福哥答案2021-01-08:[答案来自此链接:](https://www.cnblogs.com/biglucky/p/4223565.html)Cache, local memory: CPU & ...

  2. 2022-03-05:不相交的线。 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直

    2022-03-05:不相交的线. 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数. 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直 ...

  3. vue基础入门综合项目练习-悦听播放器

    1.简介 根据B站视频 黑马程序员vue前端基础教程-4个小时带你快速入门vue 学习制作. 再次感谢 免费无私的教学视频. 感谢 @李予安丶 提供的精美的css. 2.展示 3.技术点 vue2 a ...

  4. Python日期带时区转换工具类总结

    目录 1.背景 2. 遇到的坑 3. 一些小案例 3.1 当前日期.日期时间.UTC日期时间 3.2 昨天.昨天UTC日期.昨天现在这个时间点的时间戳 3.3 日期转时间戳 3.4 时间戳转日期 3. ...

  5. 从兆碱基到 Kb、KB、Bps、bps 之间的区别

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 生物信息很多文章都提到:DNA 序列的 100 万个碱基数据(兆碱基)大致相当于计算机 1 兆 ...

  6. JavaWeb编程面试题——Spring Framework

    引言 面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待.不以刷题进大厂为目的,而是以学习为目的.这里的知识点会持续更新,目录也会随时进行调整. 关注公众号:编 ...

  7. Spring事件监听机制使用和原理解析

    你好,我是刘牌! 前言 好久没有更新Spring了,今天来分享一下Spring的事件监听机制,之前分享过一篇Spring监听机制的使用,今天从原理上进行解析,Spring的监听机制基于观察者模式,就是 ...

  8. 浏览器输入URL到网页完全呈现的过程

    前言 临近计算机网络期末考试, 最近在复习(预习), 写一遍博客讲解加深印象. 浏览器输入URL过程图 浏览器输入 URL 过程: 当用户在网页上输入网址 URL 后, 浏览器会对网址进行 DNS 域 ...

  9. JUC同步锁原理

    JUC同步锁原理 1.锁的本质 1.什么是锁? ​ 通俗来讲,锁要保证的就是原子性,就是一个代码块不允许多线程同时执行,就是锁.从生活的角度上来说,就比如你要去上厕所,当你在上厕所期间,你会把门锁上, ...

  10. 前端学习C语言 - 第二篇(常量、运算符、控制和循环)

    常量.运算符.控制和循环 前文我们写了第一个 c 语言程序,了解了基本的数据类型.本篇将继续学习:常量.运算符.控制语句和循环语句. 常量 #define 常量 #define是用来定义常量和宏的预处 ...