当前位置: 首页 > news >正文

Maven 的多种打jar包方式详细介绍、区别及使用教程——附使用命令

文章目录

      • 1. **标准 JAR 打包**
        • **打包方式**
        • **配置示例**
        • **使用方式**
        • **优点**
        • **缺点**
      • 2. **可执行 JAR(Executable JAR)**
        • **打包方式**
        • **配置示例**
        • **使用方式**
        • **优点**
        • **缺点**
      • 3. **Uber JAR(Fat JAR / Shadow JAR)**
        • **打包方式**
        • **配置示例(maven-shade-plugin)**
        • **使用方式**
        • **优点**
        • **缺点**
      • 4. **Spring Boot JAR(Spring Boot Executable JAR)**
        • **打包方式**
        • **配置示例**
        • **使用方式**
        • **优点**
        • **缺点**
      • 总结

Maven 提供了多种打包方式,每种方式都有其特定的用途和优缺点。以下是 Maven 常见的打包方式以及它们在使用上的区别:

1. 标准 JAR 打包

打包方式

使用 maven-jar-plugin 插件打包。生成的 JAR 文件仅包含编译后的类文件和资源文件,不包括依赖项。

配置示例
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><mainClass>com.example.MainClass</mainClass></manifest></archive></configuration></plugin></plugins>
</build>
使用方式
  • 运行:
    java -cp target/your-artifact-id-version.jar com.example.MainClass
    
    需要指定类路径 (-cp) 来包含 JAR 文件和其他依赖项。
优点
  • 文件较小,只包含项目的代码和资源文件。
  • 适合在依赖项已经被管理的环境中使用,例如服务器或容器中。
缺点
  • 启动时需要手动管理类路径,比较麻烦。
  • 依赖项需要在运行时能够被找到,不适合分发给最终用户的场景。

2. 可执行 JAR(Executable JAR)

打包方式

同样使用 maven-jar-plugin 插件,但在 MANIFEST.MF 文件中指定主类,使得 JAR 文件可以直接被执行。

配置示例
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><mainClass>com.example.MainClass</mainClass></manifest></archive></configuration></plugin></plugins>
</build>
使用方式
  • 运行:
    java -jar target/your-artifact-id-version.jar
    
优点
  • 简化了运行命令,无需指定类路径。
  • 更易于分发和运行,特别适合终端用户使用。
缺点
  • 依赖项仍然需要在运行时可用。
  • 仅适用于不需要包含所有依赖项的场景。

3. Uber JAR(Fat JAR / Shadow JAR)

打包方式

使用 maven-shade-pluginmaven-assembly-plugin 插件生成的 JAR 文件,其中包含了所有的依赖项。

配置示例(maven-shade-plugin)
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.4.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.example.MainClass</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins>
</build>
使用方式
  • 运行:
    java -jar target/your-artifact-id-version-shaded.jar
    
优点
  • 包含所有依赖项,简化了部署和运行过程。
  • 适合在没有外部依赖项的环境中运行。
缺点
  • 生成的 JAR 文件可能较大。
  • 可能会出现类冲突或依赖重复的问题,需要额外配置来处理。

4. Spring Boot JAR(Spring Boot Executable JAR)

打包方式

使用 spring-boot-maven-plugin 插件生成的 JAR 文件,包含了 Spring Boot 运行时和所有的项目依赖。

配置示例
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.0.0</version></plugin></plugins>
</build>
使用方式
  • 运行:
    java -jar target/your-artifact-id-version.jar
    
优点
  • 包含所有依赖和 Spring Boot 特性,简化了部署和运行过程。
  • 提供内嵌的服务器(如 Tomcat、Jetty)以运行 Spring Boot 应用程序,无需额外的应用服务器。
缺点
  • 文件可能较大,因为包含了所有的依赖项。
  • 对于不使用 Spring Boot 的项目,这种打包方式可能显得过于复杂。

总结

  • 标准 JAR: 适合在依赖项已经被管理的环境中使用,需要手动指定类路径。
  • 可执行 JAR: 简化运行过程,但不包含所有依赖项,适合分发给用户。
  • Uber JAR: 包含所有依赖项,便于在无外部依赖的环境中运行,但文件较大。
  • Spring Boot JAR: 包含所有依赖和 Spring Boot 特性,适合 Spring Boot 项目,简化了运行和部署。

根据项目需求和目标环境选择合适的打包方式,可以提高开发效率和部署灵活性。

希望对你有所帮助,若有问题欢迎指正~😊

相关文章:

Maven 的多种打jar包方式详细介绍、区别及使用教程——附使用命令

文章目录 1. **标准 JAR 打包****打包方式****配置示例****使用方式****优点****缺点** 2. **可执行 JAR&#xff08;Executable JAR&#xff09;****打包方式****配置示例****使用方式****优点****缺点** 3. **Uber JAR&#xff08;Fat JAR / Shadow JAR&#xff09;****打包方…...

计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

Arthas 全攻略:让调试变得简单

文章目录 一、简介二、命令列表 一、简介 注意 &#xff1a; 我安装的版本是&#xff1a;Arthas V3.7.2 官网&#xff1a;https://arthas.aliyun.com/doc/ 相关错误解决方案请看GitHub&#xff1a;https://github.com/alibaba/arthas/issues Alibaba开源的Java诊断工具。 从…...

icpc江西:L. campus(dij最短路)

题目 在樱花盛开的季节&#xff0c;西湖大学吸引了大量游客&#xff0c;这让胥胥非常烦恼。于是&#xff0c;他发明了一个神奇的按钮&#xff0c;按下按钮后&#xff0c;校园里所有的游客都会以光速从最近的大门离开学校。现在&#xff0c;胥胥非常好奇&#xff0c;游客们以光…...

日志收集工具 Fluentd vs Fluent Bit 的区别

参考链接&#xff1a; FluentdFluentd BitFluentd & Fluent Bit | Fluent Bit: Official Manual Fluentd 与 Fluent Bit 两者都是生产级遥测生态系统&#xff01; 遥测数据处理可能很复杂&#xff0c;尤其是在大规模处理时。这就是创建 Fluentd 的原因。 Fluentd 不仅仅是…...

PostgreSQL技术内幕11:PostgreSQL事务原理解析-MVCC

文章目录 0.简介1.MVCC介绍2.MVCC常见的实现方式3.PG的MVCC实现3.1 可见性判断3.2 提交/取消 0.简介 本文主要介绍在事务模块中MVCC(多版本并发控制&#xff09;常见的实现方式&#xff0c;优缺点以及PG事务模块中MVCC&#xff08;多版本并发控制&#xff09;的实现。 1.MVCC…...

Java-面向对象编程(基础部分)

类和对象的区别和联系 类&#xff1a;类是封装对象的属性和行为的载体&#xff0c;在Java语言中对象的属性以成员变量的形式存在&#xff0c;而对象的方法以成员方法的形式存在。 对象&#xff1a;Java是面向对象的程序设计语言&#xff0c;对象是由类抽象出来的&#xff0c;…...

SMS over IP原理

目录 1. 短消息业务的实现方式 2. 传统 CS 短消息业务中的发送与送达报告 3. MAP/CAP 信令常见消息 4. SMS over IP 特点概述 5. SMS over IP 中的主要流程 5.1 短消息注册流程(NR 或 LTE 接入) 5.2 短消息发送(MO)流程(NR 或 LTE 接入) 5.3 短消息接收(MT)流程(NR 或…...

Linux中使用Docker容器构建Tomcat容器完整教程

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f427;Linux基础知识(初学)&#xff1a;点击&#xff01; &#x1f427;Linux高级管理防护和群集专栏&#xff1a;点击&#xff01; &#x1f510;Linux中firewalld防火墙&#xff1a;点击&#xff01; ⏰️创作…...

【机器学习】7 ——k近邻算法

机器学习7——k近邻 输入&#xff1a;实例的特征向量 输出&#xff1a;类别 懒惰学习&#xff08;lazy learning&#xff09;的代表算法 文章目录 机器学习7——k近邻1.k近邻2.模型——距离&#xff0c;k&#xff0c;分类规则2.1距离——相似程度的反映2.2 k值分类规则 算法实…...

2024.09.09 校招 实习 内推 面经

&#x1f6f0;️ &#xff1a;neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 佑驾创新 MINIEYE 2025校园招聘正式启动&#xff08;内推&#xff09; 校招 | 佑驾创新 MINIEYE 2025校园招聘正式启动&#xff08;内推&#xff09; 2、校招 | 长安汽…...

浅谈Linux中的环回设备

什么是环回设备 环回设备&#xff08;loop device&#xff09; 是 Linux 系统中一种特殊的虚拟设备&#xff0c;它允许你将一个普通的文件当作块设备来操作。这意味着&#xff0c;借助环回设备&#xff0c;文件可以模拟为一个磁盘或分区&#xff0c;供系统读写。这种机制非常有…...

聚焦汽车智能化与电动化,亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展

抢占市场先机︱聚焦汽车智能化与电动化&#xff0c;亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展 随着汽车智能化与电动化的迅猛发展&#xff0c;汽车电子技术、车用功率半导体技术、智能座舱技术、轻量化技术/材料、软件定义汽车、EV/HV技术、测试测量技…...

(史上最全)线程池

线程池 文章目录 线程池一&#xff0c;前言二&#xff0c;线程池三&#xff0c;参数四&#xff0c;线程池的实现原理5.线程池的使用案例(自定义线程池)6.使用Executors 创建常见的功能线程池1.固定大小线程池2.定时线程3.可缓存线程池4.单线程化线程池 一&#xff0c;前言 虽然…...

【ShuQiHere】 支持向量机(SVM)详解:从理论到实践,这一篇就够了

&#x1f4d6; 【ShuQiHere】 在现代机器学习课程中&#xff0c;支持向量机&#xff08;SVM&#xff09; 是不可或缺的一部分。它不仅在分类任务中有出色表现&#xff0c;还能灵活处理回归问题。尽管看似复杂&#xff0c;SVM 背后的思想却深刻而优雅。今天我们将全面探讨**支持…...

log4j2线程级动态日志级别

详见 参考 着重说明&#xff1a; DynamicThresholdFilter&#xff1a; 配置长这样&#xff1a;配置解释链接 <DynamicThresholdFilter key"logLevel" defaultThreshold"ERROR" onMatch"ACCEPT" onMismatch"DENY"><KeyVa…...

百度Android IM SDK组件能力建设及应用

作者 | 星途 导读 移动互联网时代&#xff0c;随着社交媒体、移动支付、线上购物等行业的快速发展&#xff0c;对即时通讯功能的需求不断增加。对于各APP而言&#xff0c;接入IM SDK&#xff08;即时通讯软件开发工具包&#xff09;能够大大降低开发成本、提高开发效率&#…...

CSS-Grid布局详解

前言 Grid 栅格布局 是 CSS 语言中非常强大的种布局&#xff0c;它提供了丰富的工具属性&#xff0c;可以轻松实现复杂且灵活的布局设计&#xff0c;因此想要完美使用CSS Grid 也有一定的难度和复杂性&#xff0c;我自己也是花了不少时间才真正掌握它的使用&#xff0c;在这篇…...

Give azure openai an encyclopedia of information

题意&#xff1a;给 Azure OpenAI 提供一部百科全书式的信息 问题背景&#xff1a; I am currently dabbling in the Azure OpenAI service. I want to take the default model and knowledge base and now add on to it my own unique information. So, for example, for mak…...

Nginx越界读取缓存漏洞(CVE-2017-7529)

漏洞原理&#xff1a; 影响版本内默认配置模块的Nginx只需要开启缓存&#xff0c;攻击者可以通过发送包含恶意构造range域的header请求进行远程攻击造成信息泄露。 影响范围&#xff1a; Nginx 0.5.6 – 1.13.2 漏洞复现&#xff1a; 开启靶场&#xff0c;访问8080端口 中间…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

Canal环境搭建并实现和ES数据同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安装&#xff0c;启动端口11111、8082&#xff1a; 安装canal-deployer服务端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...