当前位置: 首页 > 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 项目,简化了运行和部署。

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • shell脚本语法
  • 硬件(驱动开发)
  • Python基础 | 在虚拟环境中安装并在指定文件夹中打开Jupyter notebook
  • Pycharm安装教程
  • CentOS 中配置 OpenJDK以及多版本管理
  • 计算机人工智能前沿进展-大语言模型方向-2024-09-13
  • 【C++笔记】八、结构体 [ 1 ]
  • ALSA ubuntu 编译
  • 如何安装和注册 GitLab Runner
  • 2018年国赛高教杯数学建模C题大型百货商场会员画像描绘解题全过程文档及程序
  • Kafka性质小结
  • FutureTask源码分析
  • 江科大笔记—STM32课程简介
  • 杭州电子科技大学《2020年+2021年861自动控制原理真题》 (完整版)
  • nginx基础篇(一)
  • 【Amaple教程】5. 插件
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Python_OOP
  • ReactNativeweexDeviceOne对比
  • sublime配置文件
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • win10下安装mysql5.7
  • 闭包--闭包之tab栏切换(四)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 实现菜单下拉伸展折叠效果demo
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 正则学习笔记
  • Hibernate主键生成策略及选择
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • !!java web学习笔记(一到五)
  • #QT(QCharts绘制曲线)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (day 12)JavaScript学习笔记(数组3)
  • (NSDate) 时间 (time )比较
  • (过滤器)Filter和(监听器)listener
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (推荐)叮当——中文语音对话机器人
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)创业的注意事项
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (自用)仿写程序
  • *** 2003
  • **PHP分步表单提交思路(分页表单提交)
  • .htaccess配置常用技巧
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .Net MVC + EF搭建学生管理系统
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 常见的偏门问题
  • .NET 使用 XPath 来读写 XML 文件
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)