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. 2020-09-15:java里的wait()和sleep()的区别有哪些?

    福哥答案2020-09-15:#福大大架构师每日一题# 1.线程状态.wait()的线程状态是TimedWaiting和Waiting.sleep()的线程状态是Waiting.2.指定时间.wait ...

  2. 2022-09-03:n块石头放置在二维平面中的一些整数坐标点上 每个坐标点上最多只能有一块石头 如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头。 给你一个长度为 n 的数组

    2022-09-03:n块石头放置在二维平面中的一些整数坐标点上 每个坐标点上最多只能有一块石头 如果一块石头的 同行或者同列 上有其他石头存在,那么就可以移除这块石头. 给你一个长度为 n 的数组 ...

  3. 2020-12-18:java和go,并发控制有哪几种方式?

    福哥答案2020-12-18: java:锁(Synchronized, ReentrantLock).信号量(Semaphore)以及其他同步工具.原子类(atomicInteger).加法器(ad ...

  4. Django4全栈进阶之路4 APP注册

    在 Django 4 中,应用(app)的注册是通过在项目的 settings.py 文件中添加应用名称来实现的.具体步骤如下: 在项目的根目录下创建一个应用目录,该目录应包含一个 apps.py 文 ...

  5. Django报错No module named django.core.urlresolvers

    当需要测试django能否解析网站根路径的URL,并将其对应到我们编写的某个视图函数上时,使用下面的语句 from django.core.urlresolvers import resolve 执行 ...

  6. hadoop 2.7.7 ERROR datanode.DataNode: BlockSender.sendChunks() exception: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。

    最近在测试Hbase在windows上的单机版的功能. 版本:hadoop 2.7.7  hbase 2.0.0 错误: ERROR datanode.DataNode: BlockSender.se ...

  7. idea过期解决

    用作用作发现过期了,苦恼,好办直接 搞个code 就行 MNQ043JMTU-eyJsaWNlbnNlSWQiOiJNTlEwNDNKTVRVIiwibGljZW5zZWVOYW1lIjoiR1VPI ...

  8. 【模型部署 01】C++实现分类模型(以GoogLeNet为例)在OpenCV DNN、ONNXRuntime、TensorRT、OpenVINO上的推理部署

    深度学习领域常用的基于CPU/GPU的推理方式有OpenCV DNN.ONNXRuntime.TensorRT以及OpenVINO.这几种方式的推理过程可以统一用下图来概述.整体可分为模型初始化部分和 ...

  9. 区间数k大数查询

    题目 问题描述 给定一个序列,每次询问序列中第 l 个数到第 r 个数中第 K 大的数是哪个. 输入格式 第一行包含一个数 n,表示序列长度. 第二行包含 n 个正整数,表示给定的序列. 第三个包含一 ...

  10. 面试官问:kafka为什么如此之快?

    前言 天下武功,唯快不破.同样的,kafka在消息队列领域,也是非常快的,这里的块指的是kafka在单位时间搬运的数据量大小,也就是吞吐量,下图是搬运网上的一个性能测试结果,在同步发送场景下,单机Ka ...