总结:利用JDK原生命令,制作可执行jar包与依赖jar包
总结:利用JDK原生命令,制作可执行jar包与依赖jar包
- 一·什么是jar包?
- 二·制作jar包的工具:JDK原生自带的jar命令
- (1)jar命令注意事项:
- (2)jar包清单文件创建示例:
- (3)jar命令的运用详情链接地址:
- 三·执行jar包的命令方式:JDK原生自带java命令
- 四·制作依赖jar包:清单文件视情况自定义创建
- 1.需要打成jar包的class文件,没有依赖外部jar包,也没有手动创建清单文件。制作示例如下:
- (1)先创建两个类:Hello、Hello2
- (2)将java文件编译为class文件
- (3)打开控制台,进入顶层包名所在目录下面
- (4)使用jdk自带的jar命令,进行打包
- (5)将jar包解压缩查看层次结构
- (6)将jar包拿到其他项目当作依赖包使用:成功!
- 2.需要打成jar包的class文件,有依赖外部jar包,则必须手动创建清单文件MANIFEST.MF,制作示例如下
- (1)创建一个Hello3类
- (2)编译为class文件
- (3)手动创建清单文件MANIFEST.MF,位置自定义。清单文件中必须存在Class-Path属性,指明该包里面的类依赖外部jar包的相对路径(相对主jar包所在目录),多个jar包路径就空格隔开。该路径也可以自定义设置,但也不建议太随意
- (3-1)Class-Path属性后面的所有jar包相对路径,都不能从斜杠“/”开始
- (3-2)如果清单文件中存在多个Class-Path属性值,则最后生成jar包里面的清单文件只会保留最下面出现的Class-Path属性值,上面的自动忽略掉
- (3-3)Class-Path属性后面的所有jar包相对路径,是相对于主jar包(即:你最终代码文件生成jar包)所放置目录的。在主jar包所在目录后面,继续拼接上Class-Path属性指定的相对路径,这样形成的路径才是完整的jar包引入路径。
- (3-4)因此外部jar包没有必要在打包的时候又封装进去,即使你封装进去,也不会生效的。因为打包之后,里面封装的各种文件所在目录永远是主jar包所在目录的子目录,这样虚拟机就永远找不到jar包加载路径。
- (3-5)一旦存在外部jar包依赖,该jar就不能独立使用,需要结合依赖的外部jar包且外部jar包必须存放在Class-Path属性指定的相对目录下面,这样才能正确使用,否则就容易报找不到具体类异常
- (3-6)MANIFEST.MF文件,第一行不可以是空行( 第一行的行前不可以有空行),行与行之间不能有空行,每行的行尾不可以有空格
- (3-7)MANIFEST.MF文件,最后一行必须是空行(在输完你的内容后加一个回车就OK)
- (3-8)MANIFEST.MF文件,分号后面一定要有空格:
- (4)打开控制台,进入顶层包名所在目录下面
- (5)使用jdk自带的jar命令,进行打包
- (6)将jar包解压缩查看层次结构
- (7)将jar包拿到其他项目当作依赖包使用,注意在指定目录下引入其他jar包:成功!
- 五·制作可执行jar包:清单文件必须自定义创建
- (1)先创建Hello4类
- (2)编译成class文件
- (3)手动创建清单文件MANIFEST.MF,位置自定义。清单文件中必须存在Main-Class属性,指明主程序类路径,从顶层包名开始
- (3-1)MANIFEST.MF文件,第一行不可以是空行( 第一行的行前不可以有空行),行与行之间不能有空行,每行的行尾不可以有空格
- (3-2)MANIFEST.MF文件,最后一行必须是空行(在输完你的内容后加一个回车就OK)
- (3-3)MANIFEST.MF文件,分号后面一定要有空格:
- (4)打开控制台,进入顶层包名所在目录下面
- (5)使用jdk自带的jar命令,进行打包
- (6)将jar包解压缩查看层次结构
- (7)使用JDK原生自带命令,执行jar包:成功!
一·什么是jar包?
JAR(Java Archive)是Java开发中常用的一种文件格式。它是一种归档文件,用于将多个Java类文件、资源文件和元数据打包成一个单独的文件。JAR文件通常用于分发和部署Java应用程序和库。 JAR包可以包含编译后的Java类文件(.class文件)、配置文件、图像、音频文件等资源,以及描述这些文件的元数据信息。JAR包还可以包含清单文件(Manifest),用于指定JAR包的属性和配置信息。 JAR包具有压缩功能,可以将多个文件压缩成一个较小的文件,以便更方便地传输和存储。它还提供了方便的类加载和资源访问机制,使得Java应用程序可以轻松地使用JAR包中的类和资源。
综上所述:jar包就是将一系列Java开发文件压缩成归档包,方便代码文件管理、传输与部署等等
二·制作jar包的工具:JDK原生自带的jar命令
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...名词解释:
{ctxui}:执行jar命令的必选参数,每次执行jar命令必须至少选择一个参数
[vfmn0PMe]:执行jar命令的可选项参数,每次执行jar命令可选可不选
[jar-file]:最终生成jar包输出路径及jar包名称
[manifest-file]:生成jar包使用的清单文件路径
[entry-point]:程序执行入口
[-C dir]:跳转到指定目录下面执行jar命令
files:需要打包文件所在目录路径选项:-c 创建新档案-t 列出档案目录-x 从档案中提取指定的 (或所有) 文件-u 更新现有档案-v 在标准输出中生成详细输出-f 指定档案文件名-m 包含指定清单文件中的清单信息-n 创建新档案后执行 Pack200 规范化-e 为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点-0 仅存储; 不使用任何 ZIP 压缩-P 保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件-M 不创建条目的清单文件-i 为指定的 jar 文件生成索引信息-C 更改为指定的目录并包含以下文件
(1)jar命令注意事项:
(1)如果任何文件为目录, 则对其进行递归处理。
(2)清单文件名, 档案文件名和入口点名称的指定顺序与'm', 'f' 和 'e' 标记的指定顺序相同。
(3)清单文件名一般就两种固定名称,不允许随意修改文件名称:MANIFEST.MF、manifest.txt示例 1: 将当前目录下面的所有文件归档到一个名为 classes.jar 的档案中: jar cvf classes.jar .示例 2: 使用现有的清单文件 'mymanifest' 并将 foo/ 目录中的所有文件归档到 'classes.jar' 中: jar cvfm classes.jar mymanifest -C foo/ .
(2)jar包清单文件创建示例:
Manifest-Version: 1.0
Created-By: 1.8.0_361 (Oracle Corporation)
Class-Path: lib/fastjson.jar lib/hello.jar
Main-Class: test.Hello
(3)jar命令的运用详情链接地址:
https://www.cnblogs.com/liyanbin/p/6088458.html
三·执行jar包的命令方式:JDK原生自带java命令
注意:需要该jar包的确可以执行才行,否则执行了命令也不生效
java -jar jar包路径例如:java -jar /Users/ideal/Desktop/untitled-test/out/production/untitled-test/hello4.jar
java -jar ./hello2.jar
四·制作依赖jar包:清单文件视情况自定义创建
1.需要打成jar包的class文件,没有依赖外部jar包,也没有手动创建清单文件。制作示例如下:
(1)先创建两个类:Hello、Hello2
(2)将java文件编译为class文件
(3)打开控制台,进入顶层包名所在目录下面
(4)使用jdk自带的jar命令,进行打包
命令格式(参数具体详情看文章最上面介绍):
jar cvf/-cvf 自定义jar包名称 需要打包的class文件目录例如本次示例:
(4-1)生成jar包时,自动生成一个默认清单文件:jar cvf hello.jar ./test
(4-2)生成jar包时,不生成一个默认清单文件:jar cvfM hello.jar ./test
(4-1)方式一:生成jar包时,自动生成一个默认清单文件:
jar cvf hello.jar ./test
(4-2)方式二:生成jar包时,不生成一个默认清单文件:
jar cvfM hello.jar ./test
(5)将jar包解压缩查看层次结构
(5-1)有默认清单文件的jar包
(5-2)无默认清单文件的jar包
(6)将jar包拿到其他项目当作依赖包使用:成功!
2.需要打成jar包的class文件,有依赖外部jar包,则必须手动创建清单文件MANIFEST.MF,制作示例如下
(1)创建一个Hello3类
(2)编译为class文件
(3)手动创建清单文件MANIFEST.MF,位置自定义。清单文件中必须存在Class-Path属性,指明该包里面的类依赖外部jar包的相对路径(相对主jar包所在目录),多个jar包路径就空格隔开。该路径也可以自定义设置,但也不建议太随意
(3-1)Class-Path属性后面的所有jar包相对路径,都不能从斜杠“/”开始
(3-2)如果清单文件中存在多个Class-Path属性值,则最后生成jar包里面的清单文件只会保留最下面出现的Class-Path属性值,上面的自动忽略掉
(3-3)Class-Path属性后面的所有jar包相对路径,是相对于主jar包(即:你最终代码文件生成jar包)所放置目录的。在主jar包所在目录后面,继续拼接上Class-Path属性指定的相对路径,这样形成的路径才是完整的jar包引入路径。
(3-4)因此外部jar包没有必要在打包的时候又封装进去,即使你封装进去,也不会生效的。因为打包之后,里面封装的各种文件所在目录永远是主jar包所在目录的子目录,这样虚拟机就永远找不到jar包加载路径。
(3-5)一旦存在外部jar包依赖,该jar就不能独立使用,需要结合依赖的外部jar包且外部jar包必须存放在Class-Path属性指定的相对目录下面,这样才能正确使用,否则就容易报找不到具体类异常
(3-6)MANIFEST.MF文件,第一行不可以是空行( 第一行的行前不可以有空行),行与行之间不能有空行,每行的行尾不可以有空格
(3-7)MANIFEST.MF文件,最后一行必须是空行(在输完你的内容后加一个回车就OK)
(3-8)MANIFEST.MF文件,分号后面一定要有空格:
key: value 在分号后面一定要写写一个空格
MANIFEST.MF文件内容示例
Manifest-Version: 1.0
Created-By: 1.8.0_361 (Oracle Corporation)
Class-Path: msdev/lmf/lib/fastjson.jar msdev/lmf/lib/hello.jar
(4)打开控制台,进入顶层包名所在目录下面
(5)使用jdk自带的jar命令,进行打包
jar cvfm hello3.jar /Users/ideal/Desktop/untitled-test/web/WEB-INF/MANIFEST.MF .
(6)将jar包解压缩查看层次结构
(7)将jar包拿到其他项目当作依赖包使用,注意在指定目录下引入其他jar包:成功!
五·制作可执行jar包:清单文件必须自定义创建
(1)先创建Hello4类
(2)编译成class文件
(3)手动创建清单文件MANIFEST.MF,位置自定义。清单文件中必须存在Main-Class属性,指明主程序类路径,从顶层包名开始
(3-1)MANIFEST.MF文件,第一行不可以是空行( 第一行的行前不可以有空行),行与行之间不能有空行,每行的行尾不可以有空格
(3-2)MANIFEST.MF文件,最后一行必须是空行(在输完你的内容后加一个回车就OK)
(3-3)MANIFEST.MF文件,分号后面一定要有空格:
key: value 在分号后面一定要写写一个空格
MANIFEST.MF文件内容示例
Manifest-Version: 1.0
Created-By: 1.8.0_361 (Oracle Corporation)
Main-Class: test.Hello4
(4)打开控制台,进入顶层包名所在目录下面
(5)使用jdk自带的jar命令,进行打包
jar cvfm hello4.jar /Users/ideal/Desktop/untitled-test/web/WEB-INF/MANIFEST.MF .
(6)将jar包解压缩查看层次结构
(7)使用JDK原生自带命令,执行jar包:成功!
java -jar ./hello4.jar
相关文章:

总结:利用JDK原生命令,制作可执行jar包与依赖jar包
总结:利用JDK原生命令,制作可执行jar包与依赖jar包 一什么是jar包?二制作jar包的工具:JDK原生自带的jar命令(1)jar命令注意事项:(2)jar包清单文件创建示例:&a…...

【C++】this指针讲解超详细!!!
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
系统讲解java中list.stream()的用法
在Java 8及以后的版本中,引入了新的Stream API,这个API提供了一组新的操作方法,可以便捷 地对Java集合进行过滤、映射、排序、分组等操作。 在Stream API中主要分中间操作,和终止操作 中间操作是对流进行处理但不产生最终结果的…...

字节面试:请说一下DDD的流程,用电商系统为场景
说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业字节、如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的DDD落地经验? 谈谈你对DDD的理解&…...

第26章_事务概述与隔离级别
文章目录 事务事务的特征事务的控制语句事务的生命周期事务的执行过程 ACID特性原子性一致性隔离性持久性 隔离级别不同隔离级别并发异常脏读不可重复读幻读区别 总结 事务 (1)事务的前提:并发连接访问。MySQL的事务就是将多条SQL语句作为整…...
合肥工业大学网络安全实验IP-Table
✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…...

Docker本地镜像发布到阿里云或私有库
本地镜像发布到阿里云流程 : 1.自己生成个要传的镜像 2.将本地镜像推送到阿里云: 阿里云开发者平台:开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云 2.1.创建仓库镜像: 2.1.1 选择控制台,进入容器镜像服…...

使用openvc进行人脸检测:Haar级联分类器
1 人脸检测介绍 1.1 什么是人脸检测 人脸检测的目标是确定图像或视频中是否存在人脸。如果存在多个面,则每个面都被一个边界框包围,因此我们知道这些面的位置 人脸检测算法的主要目标是准确有效地确定图像或视频中人脸的存在和位置。这些算法分析数据…...
Netty心跳检测
文章目录 一、网络连接假死现象二、服务器端的空闲检测三、客户端的心跳报文 客户端的心跳检测对于任何长连接的应用来说,都是一个非常基础的功能。要理解心跳的重要性,首先需要从网络连接假死的现象说起。 一、网络连接假死现象 什么是连接假死呢&…...

【leaflet】1. 初见
▒ 目录 ▒ 🛫 导读需求开发环境 1️⃣ 概念概念解释特点 2️⃣ 学习路线图3️⃣ html示例🛬 文章小结📖 参考资料 🛫 导读 需求 要做游戏地图了,看到大量产品都使用的leaflet,所以开始学习这个。 开发环境…...
数据结构与算法(Java版) | 详解十大经典排序算法之一:冒泡排序
前面虽然大家已经知道了多种不同的排序算法,但是我一直都没来得及给大家讲,所以,从这一讲起,我就要开始来给大家详细讲解具体的这些排序算法了。 下面,我们先来看第一个最常见的排序,即冒泡排序。 冒泡排…...
轻量封装WebGPU渲染系统示例<24>- Rendering Pass Graph基本用法(源码)
当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/PassNodeGraphTest.ts 此示例基于此渲染系统实现,当前示例TypeScript源码如下: class PassGraph extends WGRPassNodeGraph {constructor() { super();…...

开设自己的网站系类01购买服务器
开始建设自己的网站吧! 编者买了一个服务器打算自己构建一个网站,用于记录生活。网站大概算是一个个人博客吧。记录创建过程的一些步骤 要开设自己的网站,需要执行以下关键步骤 以下只是初步列出了建立自己的网站的大概步骤,后…...

FTP、NFS、SAMBA系统服务一
一、rsync托管xinetd 1、为什么要进行服务托管 独立服务:独立启动脚本 ssh ftp nfs dns ... 依赖服务: 没有独立的启动脚本 rsync telnet 依赖xinetd服务(独立服务) 2、如何将rsync托管给xinetd服务去管理? 第一步࿱…...

transfomer模型——简介,代码实现,重要模块解读,源码,官方
一、什么是transfomer Transformer是一种基于注意力机制(attention mechanism)的神经网络架构,最初由Vaswani等人在论文《Attention Is All You Need》中提出。它在自然语言处理(NLP)领域取得了巨大成功,特…...
队列(Queue):先进先出(FIFO)的数据结构
队列是一种基本的数据结构,用于在计算机科学和编程中管理数据的存储和访问。队列遵循先进先出(First In, First Out,FIFO)原则,即最早入队的元素首先出队。这种数据结构模拟了物理世界中的队列,如排队等待服…...

吃透 Spring 系列—AOP部分
目录 ◆ AOP 简介 - AOP的概念 - AOP思想的实现方案 - 模拟AOP的基础代码 - AOP相关概念 ◆ 基于xml配置的AOP - xml方式AOP快速入门 - xml方式AOP配置详解 - xml方式AOP原理剖析 ◆ 基于注解配置的AOP - 注解方式AOP基本使用 - 注解方式AOP配置详解 - 注解…...
redis 问题解决 2
1.4 数据存储 1、Redis 的数据过期策略是什么? Redis的数据过期策略包括两种机制:被动删除和主动删除。 被动删除: 当某个键被访问时,如果发现这个键已经过期,Redis会立即删除这个键。这意味着如果一个过期的键从未被访问,它就不会被自动删除。这是一种惰性删除策略。主…...
Spring Boot 校验用户上传的图片文件
图片上传是现代应用中非常常见的一种功能,也是风险比较高的一个地方。恶意用户可能会上传一些病毒、木马。这些东西不仅严重威胁服务器的安全还浪费了带宽,磁盘等资源。所以,在图片上传的接口中,一定要对用户上传的文件进行严格的…...

【springboot配置项动态刷新】与【yaml文件转换为java对象】
文章目录 一,序言二,准备工作1. pom.xml引入组件2. 配置文件示例 三,自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四,yaml文件转换为java对象1. 无法使…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...