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

news/2024/12/22 14:25:19/

文章目录

      • 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 文件,其中包含了所有的依赖项。

mavenshadeplugin_88">配置示例(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 项目,简化了运行和部署。

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

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


http://www.ppmy.cn/news/1526542.html

相关文章

Comsol 利用多孔材料填充复合吸声器,拓宽低频完美吸声

参考文献&#xff1a;Cheng B , Gao N , Huang Y ,et al.Broadening perfect sound absorption by composite absorber filled with porous material at low frequency:[J].Journal of Vibration and Control, 2022, 28(3-4):410-424.DOI:10.1177/1077546320980214. 为了提高低…

优化Web性能:Varnish中精准识别并缓存移动与桌面请求

引言 在现代Web开发中&#xff0c;为了提升用户体验&#xff0c;针对不同类型的设备提供定制化的内容是一项重要的策略。Varnish作为HTTP加速器和缓存代理服务器&#xff0c;能够帮助我们实现这一目标。本文将详细介绍如何利用Varnish来实现基于设备类型&#xff08;PC端与移动…

Pr:首选项 - 媒体缓存

Pr菜单&#xff1a;编辑/首选项 Edit/Preferences Premiere Pro 首选项中的“媒体缓存” Media Cache选项卡的设置用于管理和优化媒体缓存文件的存储与清理。定期清除媒体缓存是优化 Pr 性能或进行故障排除的最佳做法。 将视频和音频导入 Pr 时&#xff0c;它会将这些文件处理成…

企业的终端安全该怎么防护?

安装金刚钻信息网站数据防泄密系统能够有效防止终端数据泄露&#xff0c;提供全面的安全保障。该系统通过对终端上的敏感数据进行加密&#xff0c;确保只有经过授权的用户才能访问或读取数据&#xff0c;即使设备丢失或遭到入侵&#xff0c;数据也不会被轻易获取。此外&#xf…

单硬盘安装Win10和麒麟V10双系统指导建议

随着信创电脑的普及,国产操作系统也逐渐走进了大家的视野,许多人选择了国产操作系统来体验其开源、安全、高效的特性,而Windows系统也是大多数人习惯使用的操作系统。一台电脑上同时安装银河麒麟V10和Windiows10双系统也成为了非常常见的需求。那么,如何在一台电脑上安装银…

SpringBoot框架下的房产销售系统设计与实现

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统&#xff0c;它彻底改变了过去传统的…

Android12_13左上角状态栏数字时间显示右移动

文章目录 问题场景解决问题 一、基础资料二、代码追踪三、解决方案布局的角度解决更改paddingStart 的默认值设置marginLeft 值 硬编码的角度解决 问题场景 1&#xff09;早期一般屏幕都是方形的&#xff0c;但是曲面屏&#xff0c;比如&#xff1a;好多车机Android产品、魔镜…

Qt ORM模块使用说明

附源码&#xff1a;QxOrm是一个C库资源-CSDN文库 使用说明 把QyOrm文件夹拷贝到自己的工程项目下, 在自己项目里的Pro文件里添加include($$PWD/QyOrm/QyOrm.pri)就能使用了 示例test_qyorm.h写了表的定义,Test_QyOrm_Main.cpp中写了所有支持的功能的例子: 通过自动表单添加…