SpringBoot jar包大小优化问题及解决

目录
  • 这里提供两种解决方案
  • 方案一:清理Maven依赖中无用依赖
  • 方案二:外部引用 jar 包(立竿见影)

这里提供两种解决方案

  • 清理 Maven 依赖中无用依赖( Unused declared dependencies )。
  • 打包时排除所有 jar 依赖改为运行时外部引用。

方案一:清理Maven依赖中无用依赖

可以使用 mvn dependency:analyze 命令对项目进行分析,并以此作为参考来剔除无用依赖。

下面对图中的 Used undeclared dependencies found 和 Unused declared dependencies found 作出解释

Used undeclared dependencies found

意为项目中有些我们使用到的 jar 包依赖并没有在 pom 文件中显示声明,这意味着这些包是通过引用传递 1 而来的。

这个时候我们可以选择显示声明他们。

Unused declared dependencies found

意为项目中存在显示声明的依赖我们在实际的应用中并没有使用到。我们可以将他们从 pom 文件中剔除。

注意:

这里虽然说实际代码中没有用到,但并不意味着一定没有用到,这里只是说 main/java 和 test 中没有使用到,具体剔除方案还需要自己衡量,这个结果只能作为参照。

方案二:外部引用 jar 包(立竿见影)

可有效缩减 jar 包大小,进而解决 Jar 包太大引发的打包慢,上传慢等问题。

1. 将原本 jar 包解压缩找到 BOOT-INF 下的 lib 目录考出,该目录下包含所需所有 jar包。

2. 在 pom 中 spring-boot-maven-plugin 打包插件设置打包时排除所有 jar 包

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <layout>ZIP</layout>
                    <includes>
                        <include>
                            <!-- 排除所有Jar -->
                            <groupId>nothing</groupId>
                            <artifactId>nothing</artifactId>
                        </include>
                    </includes>
                </configuration>
            </plugin>

此时打包,会发现 jar 包大小锐减,将 jar 包与 lib 放在同一目录下执行命令

java -Dloader.path="lib/" -jar yourjarname.jar 即可。

引用传递意为:我们通过 pom 文件声明了依赖的 jar 包 A 同时包 A 引用了 jar 包 B 即 A.jar -> B.jar 此时我们可以直接使用 B包中的代码但我们却没有显示声明引用 B包

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java启动如何设置JAR包内存大小

    目录 java启动设置JAR包内存大小 给自己的jar包运行时分配内存大小 JVM的一些参数设置 总结 java启动设置JAR包内存大小 亲测可用! java -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M -jar a.jar -Xms256m -Xmx512m: 对象使用的内存,也称堆内存 PermSize 类使用的内存,也称永久内存 由于Spring-boot内置tomcat,默认内存占用可能很大,最好设置下jar启动占用的

  • java命令执行jar包的多种方法(四种方法)

    大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口. 具体的方法是修改jar包内目录META-INF下的MANIFEST.MF文件. 比如有个叫做test.jar的jar包,里面有一个拥有main函数的main class:test.someClassName 我们就只要在MANIFEST.MF里面添加如下一句话: Main-Class: test.someClassName 然后我们可以在控制台里输入java

  • 指定springboot的jar运行内存方式

    指定springboot的jar运行内存 一般情况下,我们运行一个springboot的jar包,是这样运行的: java  -jar xxx.jar 如果想指定运行的内存,可以这样: java -Xms10m -Xmx200m -jar xxx.jar 这个参数是java命令的参数,其他详细的细节可以看java的doc或者百度了. 启动jar包,并设置内存大小 nohup java -jar -Xms512M -Xmx2048M -XX:PermSize=512M -XX:MaxPermSiz

  • SpringBoot jar包大小优化问题及解决

    目录 这里提供两种解决方案 方案一:清理Maven依赖中无用依赖 方案二:外部引用 jar 包(立竿见影) 这里提供两种解决方案 清理 Maven 依赖中无用依赖( Unused declared dependencies ). 打包时排除所有 jar 依赖改为运行时外部引用. 方案一:清理Maven依赖中无用依赖 可以使用 mvn dependency:analyze 命令对项目进行分析,并以此作为参考来剔除无用依赖. 下面对图中的 Used undeclared dependencies f

  • 解决SpringBoot jar包中的文件读取问题实现

    前言 SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档.导出模版等),本地开发时可以正常读取 ,但是,当我们打成jar包发布到服务器后,再次执行程序时就会抛出找不到文件的异常. 背景 这个问题是在一次使用freemarker模版引擎导出word报告时发现的.大概说一下docx导出java实现思路:导出word的文档格式为docx,事先准备好一个排好版的docx文档作为模版,读取解析该模版,将其中的静态资源

  • springboot jar包外置配置文件的解决方法

    为什么要搞个解决方案呢?按照网上教程,spring boot项目中,配置文件有优先级,其中,放在根目录下的config文件夹中优先级最高:根目录下次之:然后是resources/config/:resources/下优先级最低.而加载顺序刚好反过来,resources/下最先加载,而/config/最后加载.然后在命令行方式下,指定一下这个配置文件的路径,就可以了,云云. 也许事实就是如此的吧,但我试来试去,总不成功,系统死活都要读resources/下,这个优先级最低的配置文件. 这对于用 j

  • Vue包大小优化的实现(从1.72M到94K)

    一.背景 最近做了一个网站,uidea,是用来辅助独立开发者做一些 UI 设计的,当时只管开发,等部署完以后,发现访问速度堪忧 毕竟是个小水管服务器,相比提高带宽,还是先看看代码上能不能优化一下,性价比更高 这个是优化前的包大小,这家伙都上 1.72 M 了,小水管加载时间直接往 3s 以上走了,臣妾扛不住啊 二.目标 这必须得优化一下,优化前得大致定一下目标,目标又需要指标来衡量,所以定了两个指标: 页面加载时间不多说,至少得 1s 以内,越快越好 包大小控制在 200k 以内 为什么定这两个

  • Linux编辑启动、停止与重启springboot jar包脚本实例

    前言 springboot的配置文件中,配置文件的名字都有各自的意义跟用途 dev 开发环境 prod 生产环境(默认) test 测试环境 加载指定配置文件 --spring.profiles.active=prod springboot加载jar包的方式有 // 直接在控制台进行启动,缺点就是控制台关闭项目也就关闭了. java -jar bootdo.jar // 这种方式可以运行在后台,但是如果推出了shell的话,那也会挂 java -jar /bootdo-2.0.0.jar > b

  • 基于将Android工程做成jar包和资源文件的解决方法

    需要特别注意的是,以jar包和资源包方式提供给第三方开发者,我们的工程的代码中就不能使用类似于R.layout.main.R.string.name等等这样的方式来引用资源了. 为此,我们就不能直接使用R文件,而是要通过字段名称来动态的获取资源的id,再来使用. 以下封装了一个类,可以通过字段名称动态获取id. 复制代码 代码如下: package com.arui.util; import android.content.Context; public class ResourceUtil {

  • Springboot jar包远程调试详解

    对于运行在服务器上面,隐藏较深,通过日志也排查不出的问题,有的时候需要通过本地调试来一步步排错,教过好些同事远程调试所需配置步骤,特此用笔记录下来,避免重复劳动. 一.idea打包 二.install 后jar包位置 三.运行程序(远程调试启动) 找到jar所在路径,进入cmd窗口,命令如下,监听启动5005端口(和程序的端口8089没关系)-远程调试启动语句: // 找到对应的jar包目录,cmd窗口中执行下面语句即可java -Xdebug -Xrunjdwp:transport=dt_so

  • 使用springboot 打包插件去除jar包瘦身

    1.pom文件配置 1.1 添加maven-dependency-plugin插件用于将引用的jar包拷贝到指定的路径 便于后续tomcat启动指定依赖包路径 <!--拷贝依赖到jar外面的lib目录--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <execution

  • SpringBoot项目运行jar包启动的步骤流程解析

    SpringBoot项目在开发中,方便快捷,有一点原因就是SpringBoot项目可以打jar包运行:把jar包直接扔服务器上,然后运行jar包就能访问项目接口了.下面介绍SpringBoot项目打jar包运行的步骤流程: 一.我们所熟悉的是在开发环境下,直接用开发工具来运行那个启动类,然后就能启动这个项目: 开发环境下启动项目 二. SpringBoot项目打jar包方法: [1]在cmd界面中,进入项目的本地存储地址 cmd命令下进入项目地址 [2]运行maven的打包命令,mvn clea

  • Maven中jar包冲突原理与解决办法

    Maven中jar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题.本文将从jar包冲突的原理和解决两个方面阐述Maven中jar包冲突的解决办法. 一.Maven中jar包冲突产生原因 MAVEN项目运行中如果报如下错误: Caused by:java.lang.NoSuchMethodError Caused by: java.lang.ClassNotFoundException 十有八九是Maven jar包冲突造成的.那

随机推荐