生成带依赖Jar 包的两种常用方式:IDEA打包工具:Artifacts 和 maven-shade-plugin

本文主要是介绍生成带依赖Jar 包的两种常用方式:IDEA打包工具:Artifacts 和 maven-shade-plugin,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 1、IDEA打包工具:Artifacts
    • 1.1 创建Artifacts
    • 1.2 选择第三方jar文件
    • 1.3 打包Artifacts
    • 1.4 测试jar包
  • 2、maven-shade-plugin
    • 2.1、pom文件添加
    • 2.2、打包
    • 2.3、测试jar包
  • 总结


前言

当我们编写完Java程序后,为了提高执行效率通常会将应用程序打包成JAR(Java Archive)包。JAR包中的类文件经过预编译和优化,可以直接被Java虚拟机(JVM)执行,而无需再次编译。这样可以避免重复的编译过程,减少了启动时间和运行时的开销。
为了保证生成的JAR包可以直接在虚拟机中运行,需要采用带依赖的打包方式。本文提供了两种常用的打包方式:

  1. IDEA自带的打包工具: Artifacts;
  2. 使用pom引入:maven-shade-plugin进行打包。

1、IDEA打包工具:Artifacts

1.1 创建Artifacts

使用快捷键(Ctrl+Alt+Shift+S)可以快速打开项目的Project Structure。
在这里插入图片描述
按照Artifacts==> “+” ==> “JAR” ==> "From modules with dependencies"的顺序
在这里插入图片描述

点击Main Class 。在Select Main Class==>Search by Name中选择选择程序的入口函数。
在这里插入图片描述
在这里插入图片描述
再点击上图的Ok,创建得到的artifacts。
在这里插入图片描述

1.2 选择第三方jar文件

通过 “+” 或者 “-” 选择需要打入artifacts的第三方jar文件,如图:
在这里插入图片描述
Extracted后的JAR包是指从Jar包中提取出来的已经解压的文件,通常包括类文件、资源文件等等。如果没有这些文件,直接运行JarAR包会导致无法加载运行所需的类文件,从而提示类找不到的错误。
选择完第三方Jar文件后,点击Apply和OK,保存配置信息。

1.3 打包Artifacts

在菜单栏目找到Build,选择Build Artifacts。
在这里插入图片描述

最后窗口,点击Build们就可以生成JAR包了。
在这里插入图片描述

打包后的位置在左侧的out中。
在这里插入图片描述

1.4 测试jar包

在jar包位置,右键选择Open in ==> Explorer ;
在这里插入图片描述
来到jar包的位置,在上方的地址栏直接输入“cmd”
在这里插入图片描述
执行命令:

java -jar <pack-name>
<pack-name>:为要执行的jar包名称

例如:

java -jar emSystem_install_UI.jar

执行结果。
在这里插入图片描述


2、maven-shade-plugin

我个人更喜欢使用maven-shade-plugin进行打包。它能够将Java项目打包成可执行的JAR文件,并自动包含所有依赖项,从而无需单独安装和配置所有的依赖项。

2.1、pom文件添加

在pom文件中加入以下内容:

	<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.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.kbdct.swing.frame.panelSysAuth.test.TestMainSecond</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>
<groupId>、<artifactId> 和 <version> 元素指定了要使用的 Maven Shade Plugin 版本。<executions> 元素定义了一个插件执行<phase> 元素指定了这个插件执行的阶段,在这里是 package 阶段。<goals> 元素指定了要在执行时使用哪个插件(这里是 shade )。<configuration> 元素包含了 Shade Plugin 的详细配置。<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">。是一个转换器。在这个例子中,转换器的功能是:为打包的 Jar 文件生成一个 MANIFEST.MF 文件。<mainClass> 元素中指定了可执行的 Java 类,这个类将作为启动项目时的主类。

2.2、打包

按照clean==>complie==>package的顺序进行打包。
在这里插入图片描述

在左侧会生成target文件,里面就有可以执行的jar文件
在这里插入图片描述

补充:使用 maven-shade-plugin 打包的项目被存储在 Maven 项目的 target 目录下,并生成三个文件:

1. “-SNAPSHOT” 后缀的 Jar 包: 原始的 Jar 包。“-SNAPSHOT” 后缀是 Maven 的一种命名规范,用于表示当前版本是一种开发中的、不稳定的版本。
2. “origin” 前缀的Jar包: 是没有经过重命名的依赖 Jar 包。这些 Jar 包通常包含项目依赖的库和框架。
3. “-SNAPSHOT-shaded” 后缀的 Jar 包: 是经过重命名的可运行 Jar 包。这个重命名避免了与其他依赖项名称冲突。在其中的MANIFEST.MF 文件中也包含了正确的主类信息。

2.3、测试jar包

测试的过程与1.4部分同理。建议运行-1.0-SHAPSHOT-shaded.jar结尾的jar包,此处直接展示测试结果。
执行命令:

java -jar <pack-name>
<pack-name>:为要执行的jar包名称

例如:

java -jar emSystem_install_UI-1.0-SHAPSHOT-shaded.jar

执行结果。
在这里插入图片描述


总结

介绍了两种打包方法:

  1. IDEA打包工具:Artifacts
  2. maven-shade-plugin插件

这篇关于生成带依赖Jar 包的两种常用方式:IDEA打包工具:Artifacts 和 maven-shade-plugin的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/446155

相关文章

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖