用java API制作可执行JAR文件

创建与运行Java可执行JAR文件的详细指南 Java可执行JAR文件,或称为可执行档案文件,是Java平台上一种包含程序资源的压缩包格式。它不仅能存储Java类文件,还包括编译后的字节码、程序使用的库文件、资源文件和清单文件(MANIFEST.MF),后者指定了JAR文件的主类,即程序启动的入口点。与传统的.class文件相比,JAR文件具有更好的组织结构、更易于部署以及简化了发布流程的特点。这种格式在Java平台上广泛应用于应用程序的打包和分发,尤其是在服务端和桌面应用的开发中尤为重要。 阅读详情

作者:Shawn Silverman 翻译:Sean 
      本文阐述了如何把一个不可执行的JAVA Archive(JAR)文件变成可执行,而不用直接操作manifest文件。你会学到写出短小的一个程序,通过运行
java -jar
命令或在像windows一样的操作系统里面用双击鼠标运行任何JAR文件。

       你可以很容易地把应用程序的一整套class文件和资源文件打包到一个JAR中。事实上这就是jar文件存在的一个目的。另外一个目的就是让用户能很容易地执行被打包到jar文件里面的应用程序。那么为什么jar文件仅仅作为文件在整个java里面占据了次要的地位,而本地执行则被忽视?

       要执行一个jar文件,你可以使用java命令的-jar选项。举一个例子来说,假如你有个名叫myjar.jar的文件。这个jar是可以运行的,你可以运行它:
java -jar myjar.jar

      另外一个办法就是,当Java Runtime Environment(JRE)已经被安装到一个像windows的操作系统上,将jar文件与JVM关联(关联java.exe跟jar文件)在一起你就可以通过双击jar来运行这个应用程序。当然,jar文件必须是可执行的。

现在的问题是:如何做一个可以执行的jar?

manifest文件以及Main-class入口
     在大多数jar中,都在一个叫META-INF的目录里面保存了一个叫MANIFEST.MF的文件。那个文件里面,
包含了一个特殊表项名字叫Main-Class,告诉java -jar命令应该执行哪个class.

问题是你必须为manifest文件手工加入适当表项,而且必须在一定的位置和用一定的格式。不幸的是,不是每个人都喜欢打开写字板编辑配置文件。

让API帮你完成任务
       自从java1.2发布以来,一个叫java.uil.jar包的出现,让你能够方便处理jar文件。
(注意:该包基于java.util.zip)特别地,jar包让你通过Mainfest类,可以容易操作
那些manifest文件.

就让我们用这个API写一个程序吧。首先,这个程序必须知道三样东西:
1。我们要使之可运行的jar文件。
2。运行jar的主类(这个类必须包含在jar中)。
3。输出新jar文件的文件名,因为我们不能简单地覆盖原来的文件。

编写程序
      上面列表的三点要求将组成我们的程序的参数。现在,让我们为这个程序选择一个适当的名字。
MakeJarRunnable听起来觉得怎样?

为main方法检查参数
假设我们的main方法入口点是一个标准的main(String[])方法。我们应该这样检查程序的参数:
  if (args.length != 3) {
     System.out.println("Usage: MakeJarRunnable "
                        + "<jar file> <Main-Class><output>");
     System.exit(0);
  }
  请注意参数列表是如何描述的,因为这在以下代码中是很重要的。参数的次序和内容不是固定的;
  然而,如果你要改变他们的话,要记住响应修改其他代码。

  访问jar和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文件的main属性部分。一旦从manifest对象获得这个属性,就可以设置需要的main class。然而,如果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代码。完整程序:

 
   

 

    程序使用例子
    让我们把这个程序应用到一个例子里面来。假设你有一个应用程序,该程序的入口点是一个叫HelloRunnableWorld的 类,再假设你已经创建了一个jar叫myjar.jar,包含了整个程序。运行MakeJarRunnable:

 c:/java>java MakeJarRunnable myjar.jar HelloRunnableWorld myjar_r.jar

运行结果:

c:/java>Hello, Runnable World!

    正如前面提到的,注意一下我的参数顺序。如果你忘记了顺序,没有参数运行一下程序,它会响应出现一个用法提示信息。

    尝试对myjar.jar运行java -jar命令。然后对myjar_r.jar。注意区别不同!好了,你完成了这一切了,  浏览一下每个jar的manifest文件(META-INF/MANIFEST.MF)

 

Java JAR打包为Windows可执行EXE文件完整指南 除了标准内存参数外,exe4j还支持注入任意JVM系统属性,这对配置外部化至关重要。例如:这些属性可在应用代码中通过读取,实现环境差异化配置。此外,还可启用调试模式以便远程诊断:该参数开启JPDA调试接口,允许IDE远程连接JVM进行断点调试。在开发阶段非常有用,但生产环境中应禁用以防安全隐患。输出EXE文件的命名应遵循清晰的语义规则,建议采用如下格式:{产品名}_{版本号}_{架构}.exe例如:此举有助于运维人员识别不同构建版本,并在多架构部署时减少混淆。 阅读详情

相关推荐

loadrunner java API jar包

loadrunner java API jar包

制作可执行JAR

200年5月10号作者:Shawn Silverman 翻译:Sean摘要本文阐述了如何把一个不可执行的JAVA Archive(JAR)文件变成可执行,而不用直接操作manifest文件。你会学到写出短小的一个程序,通过运行java -jar命令或在像windows一样的操作系统里面用双击鼠标运行任何JAR文件。你可以很容易地把应用程序的一整套class文件和资源文件打包到一个JAR中。

gdsean的专栏 1930

Java接口Demo

Java接口Demo,演示接口的基本用法。

java程序打包jar包idea_idea打包java可执行jar包的实现步骤

idea打包java可执行jar包的实现步骤1,在项目上鼠标右键 --> Open Module Settings2, Artifacts --> + --> JAR --> From modules with dependencies...3, Main Class是你这个项目(脚本)的主方法,就是要运行的类,选一个4,如下图,设置 META-INF/MANIFEST.M...

weixin_28699983的博客 1818

servlet-api.jar包

jar包 好用 解决tomcat确实servlet-api.jar问题。

阿里api jar包

阿里api jar包 淘宝客联盟以及初级电商功能的api jar包文件

java api jar包_Java Jar API

Java IO教程 - Java Jar APIJAR APIJAR API包括使用清单文件的类。 Manifest类的一个对象表示一个清单文件。在代码中创建一个Manifest对象,如下所示:Manifest manifest = new Manifest();我们可以从清单文件中读取条目并向其写入条目。要将一个条目添加到主要部分,使用Manifest类中的getMainAttributes()...

weixin_32021519的博客 752

淘宝短信接口API使用jar包

淘宝阿里大于短信验证接口需要导入的jar,已在项目中使用,绝对有效。

Java基础——jar包、API和一些类型

Jar包 jar包的制作以及使用 什么是Jar包: (1)用来存放编译好的字节码文件的压缩包 (2)是Java语言专用的压缩包 为什么定义Jar包: (1)Java源代码在编译之后,会生成对应的.class文件,.class文件中包含了该类定义的各种属性和方法,所以可以脱离源代码使用 (2)脱离源代码使用需要一定条件: 需要将.Class文件打成jar包 (3)如何生成jar包: ①选中需要导出的文件,export -> java -> jar file->选择导出的位置,起一个名字即可

whymeso_diao的博客 1167

深入解析YT8521S千兆以太网PHY芯片的设计与调试要点

本文深入解析了YT8521S千兆以太网PHY芯片的设计与调试要点。重点剖析了硬件设计中的电源方案、RGMII接口电平配置(尤其是1.8V电平方案)以及PCB布局布线等关键细节,并提供了从硬件检查、驱动配置到性能测试的完整调试流程,帮助工程师规避常见陷阱,实现稳定可靠的千兆网络连接。

weixin_29190573的博客 689

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解)

本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。

weixin_27032989的博客 567

Java打包jar包和生成API文档

1.打包jar包 Jar {ctxu} {vfm0M}{jar-文件} {manifest-文件} {-C 目录} 文件名 例1:jar cfHelloWorld.java mypackage,该命令将包mypackage中的文件打包,没有执行过程显示,执行结果是再当前目录产生了HelloWorld.jar文件   例2:jar cvfHelloWorld.java myp

xx搞事情的博客 3779

PuTTY使用方法

PuTTY是一款开源SSH/Telnet客户端,主要用于Windows系统连接Linux服务器。使用步骤包括:下载安装PuTTY,输入服务器IP和端口(默认22),可选择保存会话配置。支持密码和SSH密钥认证(需转换.pem为.ppk格式)。首次连接需确认主机密钥,成功登录后可执行Linux命令。其他功能包括会话日志记录、X11转发和端口隧道配置。操作完成后输入exit断开连接。

特网云计算 3169

java filestream jar_Java 图片爬虫,java打包jar文件

1. Java 图片爬虫,制作 .jar 文件spider.javaspider.java高清图片api : https://www.xwboke.cn/api/api.php ,每请求一次,会更换一张高清大图。API1:API2import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStr...

weixin_39632397的博客 166

信号输入到底要不要接GND?单端与差分输入的接地选择与抗干扰分析

在电子工程与工业现场中,接地是信号完整性的基石。电压本身是相对值,任何测量都需要一个公共参考点,这就是地(GND)在信号输入中的核心作用。单端输入依赖信号源与接收端共地,以GND为基准还原信号;差分输入则直接测量两根信号线之间的差值,天然不依赖本地地电位,因此能有效抑制共模干扰和地环路噪声。实际选型时,需要根据传感器类型、传输距离、地电位差大小权衡:短距离共地良好的场景可用单端,长距离或高干扰环境应优先考虑差分或隔离方案。本文从接地原理出发,结合实际接线与故障排查经验,帮助工程师在PLC、采集卡和传感器链路

weixin_28703507的博客 311

高效利用ChEMBL数据库:从靶点查询到活性数据处理的完整指南

本文提供了高效利用ChEMBL数据库的完整指南,从靶点查询到活性数据处理。详细介绍了靶点精准定位、高级过滤技巧、数据导出优化以及活性数据清洗、特征工程和可视化等实战技巧,帮助药物研发人员快速获取和处理生物活性数据,提升工作效率。

weixin_29278805的博客 799

Java创建可执行的Jar文件

在Java中,通常将多个类合并到一个.jar(“ java归档文件”)文件中。库类以这种方式存储。较大的项目使用jar文件。您也可以创建结合了多个类的自己的jar文件。jar文件是使用JDK的jar.exe实用程序创建的。通过告诉jar.exe哪个类具有main,可以使jar文件可运行。为此,您需要创建一个清单文件。清单是带有“ Main-Class”指令的单行文本文件。该行必须以换行符结尾。(即:多一行)用主类清单创建的jar文件既可以用作库,也可以用作可运行的jar。

张知文的博客 1822

FreeSurfer预处理命令

比如将/source/kernel.tgz解压到 /source/linux-2.6.29 目录 tar zxvf /source/kernel.tgz -C /source/ linux-2.6.29 tar zxvf /home/tj/application/freesurfer/subjects/mindboggle/OASIS-TRT-20-1.tar.gz -C /home/tj/application/freesurfer/subjects (1)lh.thickness mri_surf2su

Dream19961996的博客 1508

Linux下使用java -jar运行可执行jar包的正确方式

问题来源 一般来说,一个稍微大些的项目都会有一些依赖的Jar包,而在将项目部署到服务器的过程中,如果没有持续集成环境的话,也就是说服务器不支持在线编译及打包,那么需要自己上传依赖的Jar包,然而可能服务器上已经存在了该项目所依赖的Jar包(比如项目修复BUG,重新打包上传,而依赖不变),无需再次上传,此时只需将该项目单独打包,在运行的时候指定CLASSPATH即可。 在将Jar包部署到

3万+

【项目实战】自动化测试软件VectorCAST介绍

VectorCAST是一款先进的自动化测试软件。VectorCAST是一款功能强大、易于使用的自动化测试软件。VectorCAST适用于各种嵌入式系统的测试。VectorCAST为嵌入式系统的测试提供了一种高效、可靠的解决方案。VectorCAST提供了一整套完整的测试工具,包括测试管理、代码覆盖、缺陷定位、报告生成等,以帮助开发人员提高测试效率,确保软件质量。VectorCAST支持。

奶爸的编程之路,也就一周冷个三天 2013

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

如何制作Jar包并在android中调用jar包

android制作jar包: 新建android工程,然后右击,点击导出,选择导出类型为Java下的JAR file,在java file specification 中不要选择androidmanifest.xml和res文件夹,就可以了。否则在调用jar包的时候会出现“Error generating final archive: Found duplicate file for APK:

wletv的专栏 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

怎么把java程序变成jar_怎样把自己编写的java程序变成jar可执行文件?能举个例子么?...

展开全部^^java教程^^《制作可执行JAR》本文阐62616964757a686964616fe59b9ee7ad9431333231623637述了如何把一个不可执行的JAVAArchive(JAR)文件变成可执行,而不用直接操作manifest文件。你会学到写出短小的一个程序,通过运行java-jar命令或在像windows一样的操作系统里面用双击鼠标运行任何JAR文件。你可以很容易地把应...

weixin_30925435的博客 421

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: Ant入门教程
下一篇: IT工程师必看的十条建议
javaActor
博客等级 码龄17年 22粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值