使不能运行的JAR文件可以使用java -jar运行

Java编译与运行:类路径与JAR文件的使用 本文详细探讨了Java中类路径(classpath)的设置与使用,以及JAR文件的创建和运行机制。通过具体例子和详细说明,解析了类路径的设置对程序编译和运行的影响,以及如何通过JAR工具打包Java程序,创建可部署的应用程序。同时,文章也涉及了系统属性的获取和使用,以及编译器和JVM在处理包和类时的内部机制。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 不能运行的JAR文件可以使用java -jar运行 摘要 本文展示如何将不可运行的JAR变为可运行的,并且不用直接操作manifest文件。你将学会开发一个短小的程序使得任何JAR文件都可以使用java -jar命令或者通过在像Windows上双击而运行。 你可以将一个应用的所有类和资源打包到一个JAR文件中。实际上,那就是jar文件的一个目的。另外一个目的是让用户可以非常容易的执行存储在JAR文件中的应用,那么为什么当他们可以成为一等公民而和本机可执行程序等同的时候,我们为什么要让他们只承担包的功能而成为java世界中的二等公民呢? 要执行一个jar文件,你可以使用java命令的-jar选项。例如你有一个可运行的文件名为myjar.jar的JAR文件,因为它是可运行的,你可以像这样执行它:java -jar myjar.jar 另外,当JRE安装在像Windows这样的操作系统上时,将jar文件和JVM关联后你就可以双击他们运行应用了。这些JAR必须是可运行的。 问题是:你如何让一个JAR是可运行的? manifest文件和Main-Class条目 在大部分JAR文件中,META-INF目录下会有一个MANIFEST.MF文件,在那个文件中有一个特殊的条目Main-Class,它告诉java -jar命令去执行那么类。 问题是你必须自己恰当的将这个特殊条目加到manifest文件中:它必须位于特定的位置并且必须符合特定的格式,然而有些人不喜欢编辑配置文件。 让API帮你做 从Java 1.2开始引人的java.util.jar包可以让你操作jar文件(注意:它建立在java.util.zip包的基础上)。更确切的说法是,java.util.jar可以让你通过Manifest类非常容易的操作那个特殊的manifest文件。 让我们编写一个程序使用那个API。首先这个程序必须知道三件事情: 1. 我们希望可以执行的JAR 2. 我们希望执行的主类(这个类必须存在于JAR内) 3. 新的JAR文件的文件名,因为我们不应该简单的覆盖那些文件 编写程序 上面的列表将会构成我们的程序的参数,基于这一点,让我们为这个应用挑选一个合适的名字。MakeJarRunnable听起来如何? 检查main的参数 假设我们的main入口是一个标准的main(String[])方法,我们首先应该检查程序的参数: if (args.length != 3) { System.out.println("Usage: MakeJarRunnable " " "); System.exit(0); } 请注意参数列表是如何被解释的,因为这对于后面的代码是非常重要的。参数的顺序和内容并不是硬性设置的,但是如果你改变它们也要记得适当的修改其他的代码。 访问JAR和它的manifest文件 首先我们必须创建一些知道JAR和manifest文件的对象: //Create the JarInputStream object, and get its manifest JarInputStream jarIn = new JarInputStream(new FileInputStream(args[0])); Manifest manifest = jarIn.getManifest(); if (manifest == null) { //This will happen if no manifest exists manifest = new Manifest(); } 设置Main-Class属性 我们将Main-Class条目放到manifest文件的主要属性部分。一旦我们从manifest对象获得了这个属性集我们就可以设置适当的主类。然而如果一个Main-Class属性已经存在于原来的JAR时怎么办?这个程序简单的打印一个警告并退出。或许我们可以增加一个命令行参数告诉程序用新的值替换已经存在的那个值. Attributes a = manifest.getMainAttributes(); String oldMainClass = a.putValue("Main-Class", args[1]); //If an old value exists, tell the user and exit if (oldMainClass != null) { System.out.println("Warning: old Main-Class value is: " oldMainClass); System.exit(1); } 输出新的JAR 我们需要创建一个新的jar文件,因为我们必须使用JarOutputStream类。注意我们必须保证没有将输入作为输出使用。作为替代,也许程序应该考虑两个jar文件相同并且提示用户是否覆盖原来的。然而我将这个保留给读者作为练习。 System.out.println("Writing to " args[2] "..."); JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(args[2]), manifest); 我们必须将原来的JAR中的每个条目都写到新的JAR中,因为对那些条目迭代: //Create a read buffer to transfer data from the input byte[] buf = new byte[4096]; //Iterate the entries JarEntry entry; while ((entry = jarIn.getNextJarEntry()) != null) { //Exclude the manifest file from the old JAR if ("META-INF/MANIFEST.MF".equals(entry.getName())) continue; //Write the entry to the output JAR jarOut.putNextEntry(entry); int read; while ((read = jarIn.read(buf)) != -1) { jarOut.write(buf, 0, read); } jarOut.closeEntry(); } //Flush and close all the streams jarOut.flush(); jarOut.close(); jarIn.close(); 完整程序 当然我们必须将这些代码放到一个类里面的main方法里面,并且具有合适的import声明。 使用范例 让我们用一个范例来使用这个程序。假设你有一个应用其main入口点是类HelloRunnableWorld(这个是它的全类名,也就是包含包名),同样假设你已经创建了一个名字为myjar.jar的JAR,包含整个应用。对于这个jar,我们像这样运行MakeJarRunnable: java MakeJarRunnable myjar.jar HelloRunnableWorld myjar_r.jar 再强调一次,就像早先提到的,注意参数列表的顺序。如果忘记了顺序,以无参的形式运行程序它就会告诉你使用信息。 使用java -jar命令运行myjar.jar和myjar_r.jar,注意它们的差异。完成这些之后,查看一下它们的manifest文件(META-INF/MANIFEST.MF)。 这里有一个建议:将MakeJarRunnable制作成一个可以运行的JAR! 运行它 通过双击一个JAR或者使用简单的命令总是比将它包含在你的classpath并运行特定的main类方便。为了帮助你作到这一点,JAR规范为JAR的manifest文件提供了一个Main-Class属性。我在这里提出的这个程序让你利用Java的JAR API非常容易的操作这个属性并制作你自己的可运行的JAR。
创建与运行Java可执行JAR文件的详细指南 Java可执行JAR文件,或称为可执行档案文件,是Java平台上一种包含程序资源的压缩包格式。它不仅能存储Java类文件,还包括编译后的字节码、程序使用的库文件、资源文件和清单文件(MANIFEST.MF),后者指定了JAR文件的主类,即程序启动的入口点。与传统的.class文件相比,JAR文件具有更好的组织结构、更易于部署以及简化了发布流程的特点。这种格式在Java平台上广泛应用于应用程序的打包和分发,尤其是在服务端和桌面应用的开发中尤为重要。 阅读详情

相关推荐

NMOS管和PMOS管做开关控制电路

NMOS管和PMOS管做开关控制电路

while(1) 3万+

双击运行 jar 文件

windows 下设置双击运行 jar 文件 大家都知道,项目打包的 jar 文件应该是可以直接运行的,虽然我们也可以用指令 java -jar xxx.jar 运行,但是总归是麻烦些,要是能双击直接打开岂不是很方便,下面我们就来一起看看怎么操作吧 首先确保本地 java 的开发环境配置成功,cmd 执行指令 java -version 正确显示版本号则配置无误,未配置过的朋友请参考这里 接下来我们找到一个可以执行的 jar 包,右键选择 打开方式 为 jdk 安装目录下的 java\jdk1.8.

董哲朋的博客 1万+

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1367

java jar启动和tomcat,Tomcat服务器上部署JAR或执行java -jar之间的区别?

Tomcat服务器上部署JAR或执行java -jar之间的区别?疑问 ?? ?理解 ! ! !疑问 ?? ?运行java web有两种方式:当使用springboot打包出jar包时,这个jar包可以直接 运行java -jar *.jar运行,另一种是把 *.jar移动到tomcat/webapps 中,二者的区别是什么?理解 ! ! !①对于springboot打包出来的jar包中已经包含了...

weixin_35696092的博客 2892

c# U盘禁用---守护进程(插入,拔出,卸载等操作)

一、简介 传统的对U盘禁用,我们多采用修改注册表的方式,详情参考:https://blog.youkuaiyun.com/qq_25372599/article/details/79815407;本文将介绍一种其他的方式–后台守护程序。其原理非常简单:当守护程序检测到U盘的插入信号,我们自动卸载U盘,致使系统无法识别U盘,达到禁用U盘的效果。 二、程序设计 2.1 变量定义 strin...

星星之火燃亮码空 2848

手把手教你用GNU Radio和PlutoSDR搭建FM收音机(附完整流程图)

本文提供了一份详细的实践指南,教你如何使用GNU Radio和PlutoSDR搭建一个功能完整的FM收音机。从软硬件环境准备、核心流程图构建,到运行调试与效果优化,手把手带你完成从射频信号接收、下变频、FM解调到音频输出的全过程,是入门软件定义无线电(SDR)的绝佳实践项目。

weixin_29189377的博客 753

java项目linux jar包部署问题

jar包发布问题

mengxiang0320的博客 1322

【笔记】使用OrCAD对电路进行蒙特卡洛分析和最坏分析

使用OrCAD对电路进行蒙特卡洛分析和最坏分析

fang_dz999的博客 3151

关于已配好java环境但双击无法打开jar包的解决方案

变量值:D:\env\java(这里需要填你 jdk 的路径,也就是 bin 的上一层)(默认这里只有\bin\javaw.exe" "%1" %*" )如果你已经装好了 java 环境直接跳到最后看解决方法即可。如果都能正确回显出版本号说明 java 环境安装成功。但是这种情况下依旧是无法直接双击打开 jar 包的。win + R 键入 regedit 打开注册表。添加 java 的路径到 path。编辑->查找:javaw.exe。之后即可直接双击打开 jar 包。变量名:Java_Home。

Welcome To My6n Blog 6223

yolov8x-p2 实现 tensorrt 推理

yolov8x-p2, tensorrt 实现.

J。 2274

YOLO项目从零开始:超详细运行教程(图文保姆级教学)

至此,我们已经完整跑通了YOLO项目的安装与启动流程,无论你是零基础小白还是刚入门的AI新兵,只要按部就班操作,也能轻松实现目标检测项目的落地。

一键难忘的博客 4804

jar 包启动报错

启动 0.启动规则:启动命令 启动参数 jar包 端口 1.正常启动 :java -jar xxxx-item.jar 2.加参数启动: java -jar -Xms512M -Xmx 2048 xxxx-item.jar 3.加端口启动: java -jar xxxx-item.jar --server.port = port (不常用) 问题及解决方案 启动前 情况一: 1.启动命令错...

WindwirdBird的博客 3467

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jar包不用java命令_使不能运行的JAR文件可以使用java -jar运行

"); System.exit(0); }请注重参数列表是如何被解释的,因为这对于后面的代码是非常重要的。参数的顺序和内容并不是硬性设置的,但是假如你改变它们也要记得适当的修改其他的代码。访问JAR和它的manifest文件首先我们必须创建一些知道JAR和manifest文件的对象://Create the JarInputStream object, and get its manifest J...

weixin_30682635的博客 437

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java文件解压后不能运行,当jar文件运行正常解压缩时,无法使用NullPointerException执行...

I'm attempting to restructure a legacy application and reduce the steps needed to deploy.To do this, I'm packaging all the class files, and Resources into a jar file.I'm using this command to jar ever...

weixin_31783001的博客 513

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

直接双击运行jar文件

java的jar文件在装有解压工具如winrar的情况下,双击会打开该文件,而不能直接运行。或者双击时报错"Can not find main class, Program will exit".关于这个问题,可以通过修改注册表来解决。        先右击jar文件,打开方式->选择默认程序->浏览,选中jre下bin文件中javaw.exe(比如我的javaw.exe在C:\Program F

zhuxiongxian的挨踢博客 2907

java jar 找不到文件_jar包中File 文件找不到的异常分析与解决

源链接:http://hxraid.iteye.com/blog/483115#comments我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码:Java代码//源代码1:packageedu.hxraid;importjava.io...

weixin_32285357的博客 2653

Java文档类JAR与可运行JAR

可运行类jar:包含了可以直接运行的Java程序,通常包含了main()方法。这种jar文件可以被Java虚拟机(JVM)执行,从而启动程序并执行其中的代码逻辑。如下已经写好了一个HelloWorld.java程序,路径为:我在其对应的路径下进入cmd,如下:然后进行以下操作:(1)javac HelloWorld.java(编译文件生成文件)(2)jar cfe HelloWorld.jar HelloWorld HelloWorld.class(将文件打包成,并指定HelloWorld。

2301_77034332的博客 1162

Windows不能用鼠标双击运行jar文件怎么办

Java应用程序jar文件可以由 JVM(Java虚拟机)直接执行,只要操作系统安装了JVM便可以运行作为Java应用程序的jar文件,其跨平台特性使得很多工具软件都用jar方式来部署分发,比如用于HP WebOS系列手机常用的工具软件WebOSQuickInstall(简称WQI)就是采用jar方式。 可是,很多朋友遇到一个难题,那就是下载了jar文件以后在Windows中不能用鼠标双击运

kqygww的专栏 1026

运行 jar 文件_如何运行JAR文件

运行jar文件Today we will learn how to run JAR File in java. In last tutorial we learned how to create jar file. Here we will learn how to run jar file from command line and some other aspects of using jar...

从零开始的教程世界 1万+

Java 运行jar文件

Java运行jar文件,包括堆各区域大小指定参数、垃圾收集器指定参数、日志参数,生产环境部署jar项目案例

张知文的博客 3859

Java JAR文件的打包与运行

类文件:编译后的.class文件,包含 Java 程序的字节码。资源文件:如图片、配置文件或音频文件。清单文件:位于,包含文件的元数据和属性。高效分发:将所有相关文件打包为单一文件,便于传输。压缩:减少文件大小,加快下载速度。可执行性:通过指定Main-Class属性,JAR 文件可以直接运行。模块化:自 JDK 9 起,JAR 文件支持模块化打包(模块化 JAR)。

静水深流 2235

使用java 运行jar文件的方法

介绍了java -cp模式运行程序时通配符的使用,重点描述了需要注意的地方。防止出错。

向Stack Overflow的大牛学习,编写文章尽量详细。 6857

java如何运行jar_如何创建JAR文件?如何运行.jar形式的Java程序?

一、如何创建JAR文件?.jar是用来压缩档案或者解压档案的文件格式,其特点是具有无损压缩的功能。想知道如何创建这种程序?请访问 http://www.cnblogs.com/yjmyzz/p/executable-jar.html.jar可以通过整理Java程序的类别文件来变为可执行文件,而编译器或Java虚拟机可以识别这些格式。.jar文件是通过javaw(Java应用程序管理器)执行的。你需...

weixin_42467508的博客 1837

Java中的Jar文件

使用IDEA创建了一个项目后,右键——>打开模块设置 点击Artifacts——>JAR——>From modules with dependencies 然后选择模块和要打包的clss文件 然后在 out\artifacts\ 目录下就会生成 Jar_test.jar文件 ...

谢公子的博客 3205
上一篇: Sun公布服务器和台式机等6大类Java软件
下一篇: 彻底明白Java的多线程-实现多线程及线程的同步
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值