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

生成带依赖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

文章目录 前言1、IDEA打包工具&#xff1a;Artifacts1.1 创建Artifacts1.2 选择第三方jar文件1.3 打包Artifacts1.4 测试jar包 2、maven-shade-plugin2.1、pom文件添加2.2、打包2.3、测试jar包 总结 前言 当我们编写完Java程序后&#xff0c;为了提高执行效率通常会将应用程序…...

idea 插件开发日志绑定问题

错误日志 Searchable options index builder completed SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/gradle/caches/modules-2/files-2.1/com.jetbrains.intellij.idea/ideaIC/2021.2/b0727ceddea2b62b16825db9308e14a470198…...

Elasticsearch(ES)概述

文章目录 一.什么是Elasticsearch?1.正向索引和倒排索引2.Mysql和ES的概念对比3.安装elasticsearch、kibana 二.IK分词器三.索引库操作四.文档操作五.RestClient操作索引库1.初始化RestClient2.创建索引库3.删除索引库4.判断索引库是否存在 六.RestClient操作文档1.新增文档2.…...

网络入门---网络编程初步认识和实践

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用&#xff0c;ip地址和MAC地址在网络通信时…...

Linux系统安装Docker-根据官方教程教程(以Ubuntu为例)

Linux系统安装Docker-根据官方教程教程&#xff08;以Ubuntu为例&#xff09; 1. 背景介绍2. 环境配置2.1 软件环境要求2.2 软件下载2.3 文档地址2.3 必备命令工具下载 3. 安装Docker3.1 使用root用户操作后续命令3.2 卸载可能存在的旧版本 4. 安装Docker4.1 更新依赖包4.2 配置…...

2023-12-03 LeetCode每日一题(可获得的最大点数)

2023-12-03每日一题 一、题目编号 1423. 可获得的最大点数二、题目链接 点击跳转到题目位置 三、题目描述 几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#x…...

【唐山海德教育】安全员b证的考试科目

安全员b证考试内容包括对安全生产知识和管理能力考核&#xff0c;采用书面或计算机闭卷考试方式&#xff0c;内容包括安全生产法律法规、安全管理和安全技术等内容。其中&#xff0c;法律法规占50%&#xff0c;安全管理占40%&#xff0c;土建综合安全技术占6%&#xff0c;机械设…...

吉他初学者学习网站搭建系列(4)——如何查询和弦图

文章目录 背景实现ChordDbvexchords 背景 作为吉他初学者&#xff0c;如何根据和弦名快速查到和弦图是一个必不可少的功能。以往也许你会去翻和弦的书籍查询&#xff0c;像查新华字典那样&#xff0c;但是有了互联网后我们不必那样&#xff0c;只需要在网页上输入和弦名&#…...

九章量子计算机:探索量子世界的革命性工具

九章量子计算机:探索量子世界的革命性工具 一、引言 九章量子计算机的推出,是近年来科技界最为引人瞩目的成就之一。这款基于量子力学的计算机,以其独特的计算方式和潜在的应用前景,引发了全球范围内的关注和讨论。本文将深入探讨九章量子计算机的原理、技术特点、应用前景…...

在 Linux 上修改 Oracle 控制文件、日志文件和数据文件的目录的脚本

以下是一个交互式的 Bash 脚本示例&#xff0c;用于在 Linux 上修改 Oracle 数据库控制文件、日志文件和数据文件的目录。脚本会要求您输入要修改的路径&#xff0c;并根据输入的路径执行相应的修改操作。 #!/bin/bash# 修改以下变量以匹配您的 Oracle 数据库设置 ORACLE_SID&…...

JavaScript 延迟加载的艺术:按需加载的最佳实践

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

HTML之实体和标签

HTML之实体和标签 实体标签meta标签语义化标签列表超链接 实体 如果我们需要在网页中书写一些特殊符号&#xff0c;则需要在html中使用【实体】&#xff08;转义符&#xff09; 实体语法&#xff1a; &实体的名字; <!DOCTYPE html> <html lang"en"> …...

【小布_ORACLE笔记】Part11-1--RMAN Backups

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…...

卷积神经网络-3D医疗影像识别

文章目录 一、前言二、前期工作1. 介绍2. 加载和预处理数据 二、构建训练和验证集三、数据增强四、数据可视化五、构建3D卷积神经网络模型六、训练模型七、可视化模型性能八、对单次 CT 扫描进行预测 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&a…...

C++基础 -33- 单目运算符重载

单目运算符重载格式 a和a通过形参确定 data1 operator() {this->a;return *this; }data1 operator(int) {data1 temp*this;this->a;return temp; }举例使用单目运算符重载 #include "iostream"using namespace std;class data1 {public :int a;data1(int…...

[传智杯 #3 初赛] 课程报名

题目描述 传智播客推出了一款课程&#xff0c;并进行了一次促销活动。具体来说就是&#xff0c;课程的初始定价为 v 元&#xff1b;每报名 m 个学员&#xff0c;课程的定价就要提升 a 元。由于课程能够容纳的学生有限&#xff0c;因此报名到 n 人的时候就停止报名。 现在老师…...

华为OD机试 - 悄悄话(Java JS Python C)

题目描述 给定一个二叉树,每个节点上站一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。 输入描述 给定二叉树 0 9 20 -1 -1 15 7 -1 -1 -1 -1 …...

LeetCode - 965. 单值二叉树(C语言,二叉树,配图)

二叉树每个节点都具有相同的值&#xff0c;我们就可以比较每个树的根节点与左右两个孩子节点的值是否相同&#xff0c;如果不同返回false&#xff0c;否则&#xff0c;返回true。 如果是叶子节点&#xff0c;不存在还孩子节点&#xff0c;则这个叶子节点为根的树是单值二叉树。…...

每日一题(LeetCode)----哈希表--三数之和

每日一题(LeetCode)----哈希表–三数之和 1.题目&#xff08;15. 三数之和&#xff09; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所…...

DL中的GPU使用问题

写在前面 在使用GPU进行深度学习训练经常会遇到下面几个问题&#xff0c;这里做一个解决方法的汇总。 &#x1f415;Q1&#x1f415;&#xff1a;在一个多卡服务器上&#xff0c;指定了cuda:1&#xff0c;但是0号显卡显存还是会被占用一定量的显存。 这个问题很经典的出现场景就…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...