如何减小 Maven 项目生成的 JAR 包体积 提升运维效率

SpringBoot+Vue2合并打包实战:从开发分离到部署合一的完整避坑指南 本文提供了一套完整的SpringBoot与Vue2项目从开发分离到合并打包部署的工程化实践指南。通过精细化配置Vue构建输出与SpringBoot静态资源服务,并巧妙解决路由与跨域问题,实现了开发时高效分离、部署时单一可执行JAR包的优雅方案,尤其适合追求运维简便的中小型项目。 阅读详情

在使用 Maven 构建 Java 项目时,有时需要减小生成的 JAR 包的体积,以提高部署效率或减少资源消耗。以下是一些有效的方法来减小 JAR 包的体积:

  1. 排除不必要的依赖
  2. 打包时,依赖jar包独立于应用jar包

1. 排除不必要的依赖

通过排除项目中不需要的依赖,可以显著减小 JAR 包的体积。在 pom.xml 中,可以在 标签中使用 标签来排除特定的依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.5.4</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 其他依赖项 -->
</dependencies>

2. 依赖jar包独立于应用jar包

一般来讲依赖不会经常变化,所以将 依赖 打包到应用外是个好主意,可以有效的减小应用包。

pom.xml 配置如下:

<!-- 打包时 依赖独立于项目jar包-->
<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.2.0</version>
      <configuration>
          <archive>
              <manifest>
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib/</classpathPrefix>
                  <mainClass>com.github.nan.web.NanWebApplication</mainClass>
              </manifest>
          </archive>
      </configuration>
  </plugin>
  <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>3.1.2</version>
      <executions>
          <execution>
              <id>copy-dependencies</id>
              <phase>package</phase>
              <goals>
                  <goal>copy-dependencies</goal>
              </goals>
              <configuration>
                  <outputDirectory>${project.build.directory}/lib</outputDirectory>
                  <includeScope>runtime</includeScope>
              </configuration>
          </execution>
      </executions>
  </plugin>

注意:第一部署应用 或者依赖有更新时,需要把依赖(lib)也上传到服务 。

效果如下:

├── target
│   ├── classes
│   ├── generated-sources
│   ├── lib
│   ├── maven-archiver
│   ├── maven-status
│   └── web-0.0.1-SNAPSHOT.jar

性能优化:jar / war包太大怎么办?分析Maven依赖,jar包瘦身 大家好,我是Oxye~ 最近在开发一些新系统,昨天发现一个系统的jar包突然变大好多,其他系统几十mb,它246mb,传输起来慢。突然想到之前看的一篇文章,有程序员把实况足球传到了SVN上,导致war包巨大一个程序员的水平能差到什么程度?我觉得自己项目不至于内置游戏,但可能依赖了多余的jar,所以进行了排查,并解决了jar过大的问题,现在把排查思路记录一下,过程并不难。如果你觉得jar或war包太大,不太正常,可以根据这个思路排除一下多余依赖,我只是排除了一个组依赖jar包就小这么多。 阅读详情

相关推荐

【减小jar,Maven分离lib打包】

总结起来,利用Maven的lib分离打包方式可以解决每次都需要打包公共包的问题,提高项目的开发效率和部署效率。同时,通过将公共包发布到Maven仓库中,还可以方便其他项目引用和复用公共包的代码。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 2307

盘点Spring Boot应用瘦身秘籍:大幅缩减jar包体积,提升应用效率

需要注意的是,使用压缩工具进行资源文件压缩可能会改变代码的可读性,因此在使用前需要进行充分测试,并确保压缩后的文件能够正常运行。另外,压缩过程可能需要一些时间,尤其是对于大型的资源文件,因此在生产环境中,可以提前进行压缩,并将压缩后的文件进行部署,以减少实时压缩的开销。这样,通过使用外部配置文件,你可以将Spring Boot应用程序的一些常用配置属性放置在外部,避免将这些属性硬编码到代码中,从而减小打包后的jar包大小。在pom.xml文件中,可以通过排除依赖的方式,去除不必要的依赖。

青轩桃李能几何,流光欺人忽蹉跎 4273

精简jar包的方法及使用

使用时需要把所需的jar包名称,处理成一个txt文档。(处理过程就不多说了,可以使用编辑工具批量替换、删除),然后,使用开发工具运行压缩包里的java文件即可。(注意,java文件在设置前需要进行路径的配置修改)

Maven打包,减少jar体积的方法

但每次修改哪怕是一行代码,都需要重新把他们构建Jar中去,往服务器上传、发布,白白消耗了大量的资源、带宽以及时间;整个Jar包中,三方依赖会被一并打包进去,占用空间最大的,也就是这部分依赖包;发现target目录中多了个lib文件夹,里面保存了所有的依赖jar,自己业务相关的jar也只有小小的157kb,相比之前21M,把Jar包解压之后,发现三方依赖竟然比整个Jar包都大(可能压缩的原因),自己的代码只有100多K;这还只是一个最基础的项目,如果业务复杂,依赖多,光是三方包可能就占用几十、几百M之多;

1934

VSLAM框架对比

格VSLAM特点介绍: (一)ORB-SLAM2 (二)ORB-SLAM3 (三)LSD-SLAM (四)

ljtx200888的博客 2293

S7-200SMART系列全套接线说明

SMART200接线方法,输入,输出,模拟量,面板,扩展糟等,并且详细说明接线原理。

文都龙哥 1万+

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

使用这种部署的方式,每次的迭代更新,不用每次都上传一个很大的 jar 包,从而节省部署时间。但这种方式也有一个弊端就是增加了 jar 包的管理成本,多人协调开发,构建的时候,还需要专门去关注是否有人更新依赖。但每次修改代码,都需要重新把他们构建 jar 中去,往服务器上传、发布,生成大量的资源、带宽、时间的浪费。Maven 在打包时会将所依赖的 jar 包全部打包进去,包含了所有的依赖和资源文件,就会导致打出来的包比较大。这种依赖可能会经常变动,所以不宜打到外部的 lib,不然就会需要经常上传更新。

旷野历程 1113

【UE5】UE5 Dedicated Server专用服务器与网络同步

这篇文章是个人在学习UE4的网络同步方面的内容的一些记录,因为UE5出来了,顺带也一起熟悉熟悉UE5,所以也就直接使用UE5来实践了。说句实在话,UE4网络同步这块确实挺难的,我自己在网上搜索的博客的内容要么停留在很浅层面只搭建一个ds服务器,要么就直接深入源码去剖析UE4的网络机制,处在中间层面的内容少之又少,不得不自己好一阵研究,强烈推荐这几位博主的博文,我在学习的过程中也从中受益匪浅。 Ken_An、风蚀之月、 刘东无敌还有我师傅推荐给我的一本关于UE4网络的PDF。 一、什么是Dedicated

Goulandis 3万+

一个小技巧,Maven 打 Jar 包体积缩小100倍

这期间,和粉丝大佬交流到关于Maven构建的优化、压缩的问题;一段简单的配置,就可以将包Jar包的大小缩小近百倍,实际的开发部署过程中,非常的实用的一个小技巧,在这里分享给各位;SpringBoot项目的依赖,我们一般都会采用Maven管理,整个项目,一般都分为以下几部分:三方依赖通过pom.xml文件配置,添加到项目中来特点:变化小,占用空间大业务代码特点:变化大,占用空间小静态资源特点:变化适...

艾小仙的专栏 1626

(遇到问题)(已解决)word敲入的公式转化为mathtype

https://www.mathtype.cn/wenti/wordgongshi-zhuanhuan.html 现在越来越多的人在文档中编辑公式的时候会选择MathType来编辑,因为它包含有众多的数学符号和模板,编辑公式时非常方便。但是也有一些人在编辑公式时没有使用MathType公式编辑器,直接使用Word中自带的公式编辑器来编辑的。当我们需要要共享一份文件的时候,这种用自带公式编辑器编辑出来的文件,在我们安装有MathType公式编辑器的电脑里打开时,双击公式没有反应,是无法对它们进行修改的.

计算机视觉 1万+

OpenClaw + Qwen 模型集成飞书完整教程

1、环境要求:- **操作系统**: Windows- **Node.js**: v18+ (推荐 v20+)- **飞书账号**: 需要企业管理员权限(创建应用用)或者个人飞书账号创建个人应用- **网络**: 能访问 GitHub 和飞书开放平台2、安装Node.js下载完成后验证是否安装成功,cmd窗口输入“node --version”,显示版本号即为安装成功(如下图所示)3、获取大模型APIKEY(这里以Qwen为例)

qq_29609427的博客 475

【轻量打包jar,减少不必要依赖】

对于大型项目,可以使用增量构建来只构建发生更改的模块,而不是整个项目。可以使用 Maven 的增量构建插件(如 Maven Invoker Plugin)来实现增量构建。可以使用 Maven 的增量构建插件(如 Maven Invoker Plugin)来实现增量构建。可以使用 Maven 的增量构建插件(如 Maven Invoker Plugin)来实现增量构建。可以使用 Maven 的构建缓存插件(如 build-cache-maven-plugin)来启用构建缓存。可以在 Maven 的。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 2162

DSSP 工具:蛋白质二级结构信息计算与批量处理教程

DSSP(Dictionary of Secondary Structure in Proteins)是一款经典的蛋白质二级结构计算工具,由荷兰癌症研究所(NKI Research)Perrakis 团队维护。它通过分析蛋白质的 PDB 结构文件,能够自动标注每个氨基酸残基的二级结构类型、相对溶剂可及性(暴露面积)等关键信息,为后续的拓扑图绘制、疏水 / 亲水表面分析、二级结构预测模型训练等提供核心数据支持。

good_rrrrr的博客 1836

Java Web部署效率提升300%:你不可不知的WAR打包优化技巧

提升Java Web部署效率300%的实战技巧,深入解析java打包war和jar的最佳实践。涵盖自动化构建、依赖优化与容器适配方案,适用于Spring Boot和传统Web应用。显著减少包体积并加快启动速度,运维部署更高效,值得收藏。

Instrustar的博客 326

LangGraph实战训练营-从零构建AI驱动的wiki知识库

本文深入解析 LangChain 团队开源的 Deep Agents 框架核心示例——LLM Wiki,一个基于大语言模型自动构建和维护持久化知识库的生产级 AI Agent 系统。文章从项目架构、环境搭建、核心原理到实战操作全面展开:详解 CompositeBackend 组合后端与细粒度权限控制的安全设计、四种工作模式(初始化/摄取/查询/质量检查)的完整流程、LangSmith 远程沙箱的隔离执行机制,以及人机协同审核(HITL)的实践应用。

program哲学 197

引以为戒:一个“看不见”的空格,导致上下文超限——从 `llama-server` 错误说起

文章摘要: 本文分享了Qwen工程团队在部署llama-server时遇到的参数失效问题:明明设置了-c 32768上下文参数,却仍报错"超出4096 tokens限制"。经排查发现,问题根源是批处理脚本中续行符^后存在两个空格,导致参数被忽略。文章详细解析了Windows批处理中^的严格语法规则(必须紧贴前字符),对比了错误与正确写法的差异,并给出4条实用建议:使用编辑器显示空白字符、调试时关闭@echo off、预检完整命令、优先单行命令。最后强调在AI系统部署中,此类"隐

刘一说的IT专栏 533

Spark应用存档实战:Fat JAR与Python环境打包部署指南

在大数据处理中,依赖管理和环境一致性是保障作业可复现性的核心挑战。Apache Spark作为主流计算框架,其作业的可靠部署依赖于将代码、依赖和配置封装为可移植单元的技术原理。通过构建自包含的Fat JAR或Python环境归档,开发者能实现依赖隔离与版本控制,显著提升生产环境的稳定性。这种技术方案特别适用于持续集成和跨集群迁移场景,能有效解决环境冲突问题。本文聚焦Spark存档的工程实践,详细对比了Fat JAR、Python环境归档等主流方案,并提供从构建、验证到集成的完整操作指南,帮助团队建立标准化的

weixin_33888907的博客 385

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

项目配置全攻略:从依赖管理到容器化部署的工程化实践

在软件开发中,项目配置是确保应用可预测、可重复构建与部署的核心环节。其原理在于通过声明式文件定义项目的依赖、构建规则、环境变量及团队协作规范,从而将代码转化为可交付的软件产品。从技术价值看,良好的配置管理能显著提升开发效率、保障环境一致性,并降低协作与运维风险。在应用场景上,无论是前端、后端还是全栈项目,都需要处理依赖管理、构建优化、多环境适配等通用问题。本文以Spring Boot项目为例,深入探讨了如何通过Maven、VS Code配置及Docker容器化等工具链,系统化地解决依赖冲突、环境隔离等常见痛

weixin_30808693的博客 399

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Muse Spark 1.2集成Muse Code:一站式大数据开发与部署实战

Apache Spark作为统一的大数据分析引擎,通过其弹性分布式数据集(RDD)和内存计算原理,为海量数据处理提供了高性能解决方案。其技术价值在于将批处理、流计算、机器学习和图计算统一到同一框架下,极大简化了复杂数据管道的构建。在实际应用场景中,开发者常面临环境配置繁琐、任务管理复杂等挑战。Muse Spark 1.2与Muse Code的深度集成,正是针对这些痛点,提供了从编码、调试到任务提交、监控的端到端工作流。通过原生支持交互式开发和一键集群提交,该集成方案显著提升了开发效率,降低了运维门槛,使团队

weixin_34152820的博客 352

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SpringBoot+Vue构建动物园管理系统的技术实践

企业级应用开发中,前后端分离架构已成为主流技术方案。SpringBoot作为Java领域的微服务框架,通过自动配置和起步依赖简化了后端开发;Vue.js则以其响应式特性和组合式API提升了前端开发效率。这种技术组合在数据密集型的业务系统中表现尤为突出,能够有效处理动物健康监测等高频率数据采集场景。在动物园管理系统这类实体业务数字化项目中,技术选型需要特别考虑实时数据处理、权限控制和系统扩展性。通过整合Redis缓存、Quartz定时任务等技术组件,可以构建出支持复杂业务规则(如基于历史数据的健康预警)的稳定

weixin_30664615的博客 459

Java Spring Boot + Vue 3 构建学生宿舍报修管理系统全流程实战

在高校信息化建设中,流程化管理是提升效率的关键。传统纸质或群组报修方式常面临流程不透明、数据易丢失等挑战。通过引入前后端分离架构,可以将复杂的业务流程线上化、标准化。其核心原理是后端提供RESTful API处理业务逻辑与数据持久化,前端负责用户交互与数据展示,两者通过HTTP协议进行解耦通信。这种模式的技术价值在于提升了系统的可维护性、可扩展性以及团队协作效率,广泛应用于各类管理后台、电商平台等场景。本文聚焦于学生宿舍报修这一具体应用,详细阐述了如何运用Spring Boot和Vue 3技术栈,实现从用户

weixin_33795743的博客 495

SpringBoot项目jar包过大,如何瘦身

本文详细介绍单个项目和带有父项目含有多个模块的大型项目,以及公共模块没有主启动类打包出错的解决方案。

m0_52542073的博客 2063

jar包瘦身

先通过idea,将项目完整打一个jar包,得到一个含有依赖文件的jar包,此时jar包的体量可能很大。用压缩文件打开jar包,找到BOOT-INF下的lib文件夹,将lib文件夹都复制出来。 在maven打包插件中,添加配置,打包时,排除依赖文件,其实重新打包,发现jar包的大小变小了 windows环境中, 将lib和新jar包放在同一个目录下,打开cmd窗口,输入 java -Dloader.path="lib/" -jar "xx.jar",即可启动 后续如果添加新的pom依赖,就.

qq_16171815的博客 1294

给你的SpringBoot工程打的jar包瘦瘦身

Spring boot默认方式打包,由于打的是全量依赖包(也称为fat包),不但打包慢,体积大,传输也慢,今天教大家给spring boot瘦瘦身。 背景 现在微服务架构越来越流行,一个项目10多个基于spring boot的服务模块很常见。假设一个服务模块打成jar包是100M,那么一次全量发布可能就需要上传1G的文件。在网络情况好的时候可能还没多大感觉,但如果是代码需要拷贝到内网发布,或者上传到某些国外服务器上, 将严重影响工作效率。 那么,有没有什么办法给我们打的spring boot的jar包瘦.

弹指天下 1万+

jar包过大?手把手教你分析Maven依赖,完美“瘦身”优化!

最近在开发一些新系统,昨天发现一个系统的jar包突然变大好多,其他系统几十mb,它246mb,传输起来慢。突然想到之前看的一篇文章,有程序员把实况足球传到了SVN上,导致war包巨大。来自”一个程序员的水平能差到什么程度?“我觉得自己项目不至于内置游戏,但可能依赖了多余的jar,所以进行了排查,并解决了jar过大的问题,现在把排查思路记录一下,过程并不难。排查思路1.发现问题使用压缩工具解压jar...

Java精选 3098

深度解析!嵌套Jar包处理优化全攻略:从依赖冲突到性能飙升(附实战案例)

本文聚焦Spring Boot微服务架构中嵌套Jar包带来的依赖冲突、启动慢、体积臃肿等问题,提出全链路优化策略。通过依赖管理优化,利用Maven、Gradle工具诊断和排除冲突;借助Layered Jar技术分离依赖层与应用层,优化类加载机制;结合构建工具配置与运行时调优,提升类加载效率。实战案例显示,优化后依赖冲突率降低80%以上,启动时间大幅缩短,Jar包体积压缩60%左右。同时给出最佳实践与避坑指南,展望云原生时代相关技术趋势,助力构建高效Jar包管理体系。

weixin_40593051的博客 1257
上一篇: xxx.jar中没有主清单属性
下一篇: 如何使用 Maven 不同环境使用不同资源文件 提升项目安全性
知楠行易
博客等级 码龄9年 320粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值