JAR文件如何在没有安装JDK的电脑上运行(指定运行环境)

一、JAR包是什么?

首先,我们来了解一下JAR(Java Archive)包。JAR包是一种文件格式,用于将Java类、资源和元数据打包到一个文件中。它通常用于将Java库、应用程序或模块分发给其他开发人员或部署到不同的环境中。JAR包可以包含许多不同类型的文件,包括.class文件(编译后的Java类)、.java文件(源代码)、图像、音频、配置文件等。

二、JAR包的创建

创建JAR包有两种主要方法:手动创建和使用工具(如Maven或Gradle)自动创建。

手动创建JAR包需要将所需的文件复制到一个文件夹中,然后在该文件夹中创建一个名为Manifest.txt的文件。Manifest.txt文件指定了JAR包的入口点(即主类),以及其他相关信息。然后,可以使用jar命令将文件夹打包成一个JAR文件。例如:

jar cvfm MyJar.jar Manifest.txt *.class

使用Maven或Gradle等构建工具可以更方便地创建和管理JAR包。例如,使用Maven可以将项目打包成一个可执行的JAR文件,只需在项目根目录下运行以下命令:

mvn clean package

具体生成JAR包,可参考博文:

idea中java maven程序打JAR包的方式 ( idea中java maven程序打JAR包的方式-CSDN博客 )

此步生成一个检测JDK版本的jar包,名为demo.jar。

三、JDK vs JRE

JDK包含了JRE的所有内容,同时还包括JAVA编译器(javac)和其他开发工具,因此它适用于开发java应用程序。

JRE仅包含java运行时环境,用于运行java程序。

JDK下载地址参考博文: windows下切换JDK8、JDK11、JDK17( windows下切换JDK8、JDK11、JDK17-CSDN博客 )

JRE9生成方式参考博文: JDK9及之后版本使用 jlink 生成定制化的 JRE( JDK9及之后版本使用 jlink 生成定制化的 JRE-CSDN博客 )

此步生成一个具体版本的jre文件夹。

 

四、如何运行JAR包?

为了运行JAR文件,至少需要安装JRE。如果计划进行java开发,那么安装JDK是必要的。

要运行JAR包,可以使用Java命令。例如,要运行一个名为MyJar.jar的JAR文件,可以在命令行中输入以下命令:

java -jar MyJar.jar

如果JAR包包含可执行的主类,则可以通过指定主类来运行它。例如:

java -cp MyJar.jar com.examp le.MainClass

注意:此处的java,会使程序到系统的环境变量中寻找java.exe程序,若是没有配置环境变量则会报不是内部命令或可运行的程序等。基于此,我们可以将jar包和jre文件打包在一起,在启动jar包命令中,指定jre文件包中的java.exe程序,这样就可以实现在没有安装JDK的电脑上运行jar包,也可以使jar包用指定的java环境运行。

将三中生成的jre文件夹和二中生成的jar包放于一个文件夹demo,运用下面的命令启动运行jar包,

后续可以将demo文件夹分发给没有安装JDK的电脑上运行jar包。

1.将demo.jar包放于jre文件中的bin文件下,用下述命令可以启动运行jar

格式: java -jar xxx.jar

xxx为jar包的文件名

如: java -jar demo.jar

2.指定bin文件夹路径

格式: path\\java -jar xxx.jar

path为jre中bin文件夹的路径; xxx为jar包的文件名

如: .\\jdk-11.0.19\\bin\\java -jar demo.jar

3.其余格式

start java -jar demo.jar

start ./jre/bin/java -jar demo.jar

五、小结

1.新建一个java工程,写入检测JDK版本的代码

2.打包一个jar包,改名为: demo.jar

3.新建一个文件夹,命名为: test; 将demo.jar放于test文件夹; 将jre文件夹放于test文件夹,最终test文件夹结构为:

4.启动运行jar包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/314315.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用flutter开发一个简单的轮播图带指示器的组件

使用PageView开发一个带指示器的轮播图组件,当轮播图切换的时候,指示器也会跟着切换,切换到当前轮播图所在的索引时,指示器的背景色会变成蓝色,否则是灰色。使用了一个curIndex变量来记录当前激活的轮播图索引。并使用…

高通平台开发系列讲解(驱动篇)如何修改UART节点名字

平台内核版本高通平台Linux4.14文章目录 一、背景二、分析过程三、解决方案一、背景 /dev/ttyMSM1强行改成/dev/ttyMSM2 以适配应用: 二、分析过程 解决思路:Uart对应的驱动源码位于kernel/msm-4.9/drivers/tty/serial/msm_serial.c,在msm_serial_probe函数的最后通过uart…

Go语言实战:如何使用Timeout Context优雅地取消任务

Go语言实战:如何使用Timeout Context优雅地取消任务 引言Go语言和并发编程简介什么是ContextTimeout Context的原理实战演示最佳实践和注意事项总结 引言 在现代软件开发中,尤其是在处理高并发系统时,正确地管理和取消正在进行的任务成为一项…

iToF人脸识别

iToF(间接飞行时间)是一种测量光飞行时间的技术,主要应用于人脸识别。 iToF人脸识别技术在哪些场景下会用到 iToF人脸识别技术可以应用于许多场景,以下是一些常见的应用场景: 平安城市:在城市监控系统中,iToF人脸识别技术可以用于实时监控、目标检测和识别,以及异常行为…

UDP协议基本原理

前言 本文主要讲解传输层中的UDP协议,我准备从UDP的特点出发,深入理解UDP协议,从UDP协议的结构推出UDP协议的特点; 一、理解端口号 前面我们总是说用IP加端口号的方式定位全网的唯一进程,通常在TCP/IP中,我…

系统学习Python——装饰器:函数装饰器-[对方法进行装饰:基础知识]

分类目录:《系统学习Python》总目录 我们在前面的文章中编写了第一个基于类的tracer函数装饰器的时候,我们简单地假设它也应该适用于任何方法一一一被装饰的方法应该同样地工作,并且自带的self实例参数应该直接包含在*args的前面。但这一假设…

在多Module项目中,给IDEA底部选项卡区域添加Services选项卡

一般一个spring cloud项目中大大小小存在几个十几个module编写具体的微服务项目。此时,如果要调试测需要依次启动各个项目比较麻烦。 idea其实提供了各module的启动管理工具了,可以快速启动和关闭各个服务,也能批量操作,比如一次…

简单FTP客户端软件开发——VMware安装Linux虚拟机(命令行版)

VMware安装包和Linux系统镜像: 链接:https://pan.baidu.com/s/1UwF4DT8hNXp_cV0NpSfTww?pwdxnoh 提取码:xnoh 这个学期做计网课程设计【简单FTP客户端软件开发】需要在Linux上配置 ftp服务器,故此用VMware安装了Linux虚拟机&…

普中STM32-PZ6806L开发板(USART2 串口 + HI-LINK-V20离线语音模块控制LED灯)

简介 买了HI-LINK-V20型号的离线语音识别模块, 为了后面可以做有意思的东西, 现在先来用用, 使用USART2 串口 接收来自我在HI-LINK-V20中预设的动作, 当识别到词条时发送对应的指令到串口, HI-LINK串口接的就是STM32F03ZET6的USART2, 且往下看。 电路原理图 连线图 连线引脚表…

【HarmonyOS开发】分布式应用的开发实践(元旦快乐)

元旦快乐,再见2023,加油2024,未来可期,愿新的一年带来健康、幸福和成功!💪 💪💪 多种设备之间能够实现硬件互助、资源共享,依赖的关键技术包括分布式软总线、分布式设备虚…

LM386简易OCL功放电路

LM386简易OCL功放电路是使用低功耗集成功率放大器LM386构成的OCL功放电路,电路结构简单,容易调试,非常适于自制。 电路工作原理:图中IC1和IC2是两片集成功放LM386,接成OCL电路。C1起到电源滤波及退耦作用,C…

WPF+Halcon 培训项目实战 完结(13):HS 鼠标绘制图形

文章目录 前言相关链接项目专栏运行环境匹配图片矩形鼠标绘制Halcon添加右键事件Task封装运行结果个人引用问题原因推测 圆形鼠标绘制代码运行结果 课程完结: 前言 为了更好地去学习WPFHalcon,我决定去报个班学一下。原因无非是想换个工作。相关的教学视…