如何减小 Maven 项目生成的 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神策数据客户旅程 GPT:以 AI 驱动客户旅程及埋点落地

数据驱动时代&#xff0c;随着 AI 在数据处理及分析方面的能力日渐强大&#xff0c;将二者结合&#xff0c;可以帮助企业效能提升&#xff0c;获取更多商业价值。 我们在 AI 大模型探索过程中发现&#xff0c;产品经理、技术人员、市场营销人员以及需要数据驱动决策的团队&…

基于opencv的人脸闭眼识别疲劳监测

1. 项目简介 本项目旨在实现基于眼部特征的眨眼检测&#xff0c;通过监测眼睛开闭状态来计算眨眼次数&#xff0c;从而应用于疲劳监测、注意力检测等场景。使用了面部特征点检测算法&#xff0c;以及眼部特征比率&#xff08;EAR, Eye Aspect Ratio&#xff09;来判断眼睛的闭…

可观测日北京|观测云:可观测性需要做到“三个一”

2024年10月&#xff0c;备受期待的中国可观测日「北京站」圆满落幕。本次活动汇聚了来自云计算、技术创新等领域的专家&#xff0c;探讨了探讨了可观测性在云计算和数字化转型中扮演的角色。观测云也在活动展示了作为可观测性行业领袖的技术力和创新力。 观测云技术亮点&#…

python画图|坐标轴显隐设置

【1】引言 前序学习中&#xff0c;已经发现坐标轴的显示具有至关重要的影响&#xff0c;因此今天继续探索相关技巧&#xff1a;坐标轴显隐设置。 前序学习内容可通过下述链接直达&#xff1a; python画图| 对齐图名和标签-CSDN博客 【2】官网教程 点击下方链接可以直达官网…

react 基础学习笔记

1.react 语法 ①数据渲染 函数组件将HTML结构直接写在函数的返回值中 JSX只能有一个根元素 JSX插值写法 插值可以使用的位置 1.标签内容&#xff1b; 2.标签属性 JSX 条件渲染&#xff1a;三目运算符&#xff1b; JSX根据数据进行列表渲染&#xff1a;map()方法&#x…

【读书笔记-《网络是怎样连接的》- 2】Chapter2_1-协议栈通信详细过程

第二章从协议栈这部分来看网络中的通信如何实现&#xff0c;准备从两部分来进行分解。本篇是第一部分&#xff1a;详细介绍TCP协议栈收发数据的过程。 首先来看下面的图。从应用程序到网卡需要经过如下几部分&#xff0c;上面的部分通过委托下面的部分来完成工作。首先是应用程…

Windows 10、Office 2016/2019 和 PPTP 和 L2TP协议即将退役,企业应尽早做好准备

关心微软技术和产品的朋友一定对这个网站很熟悉&#xff1a;https://microsoftgraveyard.com/&#xff0c;这里静静的躺着很多微软技术和产品。近日&#xff0c;微软又在准备一场新的“告别仪式”了&#xff0c;这次是 Windows 10、Office 2016/2019 和一些老旧的协议与技术。让…

Apache Seata 新版本集成了 RocketMQ 事务消息

大家好&#xff0c;我是君哥。 Apache Seata 是一款高性能、简单易用的分布式事务中间件&#xff0c;它包含 AT、TCC、SAGA 和 XA 四种模式。 在最近发布的新版本中&#xff0c;Apache Seata 引入了 RocketMQ 中间件&#xff0c;并且跟 RocketMQ 的事务消息配合使用。今天我们…

Vue Router实现路由懒加载

为了提高页面的加载速度&#xff0c;我们可以使用Vue Router的路由懒加载功能。路由懒加载是什么呢&#xff0c;路由懒加载就是只有当访问某个路由的时候再加载其相应的页面。 官方文档地址https://router.vuejs.org/guide/advanced/lazy-loading.html 以前我写路由懒加载的时候…

详细教程:使用Grafana监控Mysql

什么是Grafana Grafana是一个跨平台的开源的度量分析和可视化工具&#xff0c;可以通过将采集的数据查询然后可视化的展 示&#xff0c;并及时通知。 下载Grafana 下载地址: https://grafana.com/grafana/download [rootgrafana ~]# wget https://dl.grafana.com/oss/relea…

qt QPushButton详解

QPushButton是Qt Widgets模块中的一个基本控件&#xff0c;用于提供可点击的按钮。它是用户界面中最为常见和常用的控件之一&#xff0c;通过点击按钮&#xff0c;用户可以触发特定的应用程序操作。 重要方法 QPushButton(const QIcon &icon, const QString &text, QWi…

【OpenAI】第五节(图像生成)利用 OpenAI 的 DALL·E 实现自动化图像生成:从文本到图像的完整教程

引言 OpenAI 推出的 DALLE 工具因其能够生成令人惊叹的艺术作品而备受瞩目。DALLE 不仅能够生成静态图像&#xff0c;还能根据用户的需求进行风格化处理&#xff0c;创造出独特的艺术作品。通过 OpenAI 的 API&#xff0c;你可以轻松将 DALLE 的强大功能集成到你的 Python 程序…

《分布式机器学习模式》:解锁分布式ML的实战宝典

在大数据和人工智能时代&#xff0c;机器学习已经成为推动技术进步的重要引擎。然而&#xff0c;随着数据量的爆炸性增长和模型复杂度的提升&#xff0c;单机环境下的机器学习已经难以满足实际需求。因此&#xff0c;将机器学习应用迁移到分布式系统上&#xff0c;成为了一个不…

Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案

问题原因 升级Xcode 16 之后&#xff0c;真机运行APP&#xff0c;发现会有Crash&#xff0c;崩溃堆栈线上Crash 在 YYCache 之中。如下图所示 崩溃堆栈如下&#xff1a; * thread #1, queue com.apple.main-thread, stop reason signal SIGABRTframe #0: 0x00000001d9391…

免费开源Odoo软件如何实现电商仓库高效发货

世界排名第一的免费开源ERP软件Odoo&#xff0c;拥有非常强大的仓库管理WMS功能。本文以电商仓库发货管理为例&#xff0c;介绍电商订单的仓库发货作业的各种方法。电商订单仓库发货流程&#xff0c;通常分为三个步骤&#xff0c;即拣货、打包、发货。根据仓库日处理订单数量的…

九、pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover&#xff08;悬停&#xff09; 定义&#xff1a;发起交互的对象停留在可交互对象的交互区域。例如&#xff0c;当手触摸到物品表面&#xff08;可交互区域&#xff09;时&#xff0c;视为触发了Hover。 Grab&#xff08;抓取&#xff09; 概念&#xff…

京东笔试题

和谐敏感词 &#x1f517; 题目地址 &#x1f389; 模拟 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();String s scanner.next();String[] words new String[…

【毕业设计】基于SpringBoot的网上商城系统

前言 &#x1f525;本系统可以选作为毕业设计&#xff0c;运用了现在主流的SSM框架&#xff0c;采用Maven来帮助我们管理依赖&#xff0c;所选结构非常合适大学生所学的技术&#xff0c;非常合适作为大学的毕业设计&#xff0c;难以适中。 &#x1f525;采用技术&#xff1a;Sp…

C++:模板(2)

目录 非类型模板参数 模板的特化 概念 函数模板特化 类模板特化 全特化 偏特化 模板的分离编译 分离编译的概念 模板的分离编译 ​编辑 模板总结 非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;在模板参数列表中&#xff0c;跟在class…

HttpURLConnection构造请求体传文件

HttpURLConnection构造请求体传文件 在Java中&#xff0c;使用HttpURLConnection构造请求体传输文件&#xff0c;你需要做以下几步&#xff1a; 1、创建URL对象指向你想要请求的资源。 2、通过URL打开连接&#xff0c;转换为HttpURLConnection实例。 3、设置请求方法为POST。 …