JAVA打包jar文件的方法,高分相求

JAVA打包jar文件的方法,高分相求,第1张

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

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

要执行一个jar文件,你可以使用java命令的-jar选项。举一个例子来说,假如你有个名叫myjarjar的文件。这个jar是可以运行的,你可以运行它:java-jarmyjarjar另外一个办法就是,当JavaRuntimeEnvironment(JRE)已经被安装到一个像windows的 *** 作系统上,将jar文件与JVM关联(关联javaexe跟jar文件)在一起你就可以通过双击jar来运行这个应用程序。当然,jar文件必须是可执行的。

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

manifest文件以及Main-class入口

在大多数jar中,都在一个叫META-INF的目录里面保存了一个叫MANIFESTMF的文件。那个文件里面,

包含了一个特殊表项名字叫Main-Class,告诉java-jar命令应该执行哪个class

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

让API帮你完成任务

自从java12发布以来,一个叫javauiljar包的出现,让你能够方便处理jar文件。(注意:该包基于javautilzip)特别地,jar包让你通过Mainfest类,可以容易 *** 作那些manifest文件

就让我们用这个API写一个程序吧。首先,这个程序必须知道三样东西:

1。我们要使之可运行的jar文件。

2。运行jar的主类(这个类必须包含在jar中)。

3。输出新jar文件的文件名,因为我们不能简单地覆盖原来的文件。

编写程序

上面列表的三点要求将组成我们的程序的参数。现在,让我们为这个程序选择一个适当的名字。

MakeJarRunnable听起来觉得怎样?

为main方法检查参数

假设我们的main方法入口点是一个标准的main(String[])方法。我们应该这样检查程序的参数:

if(argslength!=3){

Systemoutprintln("Usage:MakeJarRunnable" "<jarfile><Main-Class><output>");

Systemexit(0);

}

请注意参数列表是如何描述的,因为这在以下代码中是很重要的。参数的次序和内容不是固定的;

然而,如果你要改变他们的话,要记住响应修改其他代码。

访问jar和jar的manifest文件

第一,我们必须创建一些了解jar和manifest的对象:

//CreatetheJarInputStreamobject,andgetitsmanifest

JarInputStreamjarIn=newJarInputStream(newFileInputStream(args[0]));

Manifestmanifest=jarIngetManifest();

if(manifest==null){

//Thiswillhappenifnomanifestexists

manifest=newManifest();

}

设置Main-Class属性

我们把Main-Class入口放到manifest文件的main属性部分。一旦从manifest对象获得这个属性,就可以设置需要的mainclass。然而,如果main-Class属性已经存在原来的jar当中又如何呢?这里我们只是简单地输出一个警告然后退出。我们能加入一个命令行参数告诉程序使用新的值,而代替了旧的那个:

Attributesa=manifestgetMainAttributes();

StringoldMainClass=aputValue("Main-Class",args[1]);

//Ifanoldvalueexists,telltheuserandexit

if(oldMainClass!=null){

Systemoutprintln("Warning:oldMain-Classvalueis:"

oldMainClass);

Systemexit(1);

}

输出新的JAR

我们需要创建一个新的JAR文件,所以我们必须使用JarOutputStream类。注意:

我们必须确定我们不用跟输入文件相同的名字作为输出文件的名字。还有一个方案就是,程序应该考虑到一种情况,就是两个jar文件都是相同的,促使用户覆盖原来的文件,如果他愿意这么做的话。然而,我在保留了这一点,作为读者的一个练习。从如下代码开始:

Systemoutprintln("Writingto" args[2] "");

JarOutputStreamjarOut=newJarOutputStream(newFileOutputStream(args[2]),manifest);

我们必须从输入JAR写每个表项到输出的JAR,所以迭代每个表项:

//Createareadbuffertotransferdatafromtheinput

byte[]buf=newbyte[4096];

//Iteratetheentries

JarEntryentry;

while((entry=jarIngetNextJarEntry())!=null){

//ExcludethemanifestfilefromtheoldJAR

if("META-INF/MANIFESTMF"equals(entrygetName()))continue;

//WritetheentrytotheoutputJAR

jarOutputNextEntry(entry);

intread;

while((read=jarInread(buf))!=-1){

jarOutwrite(buf,0,read);

}

jarOutcloseEntry();

}

//Flushandcloseallthestreams

jarOutflush();

jarOutclose();

jarInclose();

完成程序

当然,我们必须把这些代码放到一个类的main方法里面,并且需要一大堆import代码。完整程序:

>

JAR(JavaArchive,Java归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为J2EE应用程序创建的JAR文件是EAR文件(企业JAR文件)。

JAR文件格式以流行的ZIP文件格式为基础。与ZIP文件不同的是,JAR文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和JVM这样的工具直接使用。在JAR中包含特殊的文件,如manifests和部署描述符,用来指示工具如何处理特定的JAR。

一个JAR文件可以用于:

□用于发布和使用类库

□作为应用程序和扩展的构建单元

□作为组件、applet或者插件程序的部署单位

□用于打包与组件相关联的辅助资源

JAR文件格式提供了许多优势和功能,其中很多是传统的压缩格式如ZIP或者TAR所没有提供的。它们包括:

安全性。可以对JAR文件内容加上数字化签名。这样,能够识别签名的工具就可以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是否被篡改过。

减少下载时间。如果一个applet捆绑到一个JAR文件中,那么浏览器就可以在一个>

压缩。JAR格式允许您压缩文件以提高存储效率。

传输平台扩展。Java扩展框架(JavaExtensionsFramework)提供了向Java核心平台添加功能的方法,这些扩展是用JAR文件打包的(Java3D和JavaMail就是由Sun开发的扩展例子)。

包密封。存储在JAR文件中的包可以选择进行密封,以增强版本一致性和安全性。密封一个包意味着包中的所有类都必须在同一JAR文件中找到。

包版本控制。一个JAR文件可以包含有关它所包含的文件的数据,如厂商和版本信息。

可移植性。处理JAR文件的机制是Java平台核心API的标准部分。

JAD

Java应用程序描述符(JAD)

JAD文件包含MIDlet套件的标题信息,例如开发应用程序的公司、应用程序名称和大小。在将应用程序下载到设备上时,将先下载和读取描述符,然后再下载和读取包含MIDP应用程序的JAR文件。在装入MIDlet套件的完整JAR文件之前,移动设备上的应用程序管理软件可使用JAD文件验证MIDlet是否适用于该设备。JAD还向MIDlet提供特定于配置的属性(参数),而无需修改JAR文件。这样设备便可以确认是否具有足够的空间用于存放应用程序,以及是否应下载完整的应用程序。

Java文件的扩展名为jad。

JAD文件为纯文本格式,可用记事本打开。一个JAD文件至少需要包含包含如下属性:

MIDlet-Name。向用户标识MIDlet的MIDlet套件名称。

MIDlet-Version。MIDlet套件的版本号。应用程序管理软件使用该版本号执行安装 *** 作和升级,以及与用户进行通信。

MIDlet-Vendor。提供MIDlet套件的组织。

根据项目配置所支持的MIDP版本,还可以使用其他属性:

MIDlet-JAR-URL。此MIDlet套件的JAR文件的位置和名称。

MIDlet-JAR-Size。通过此MIDlet套件生成的JAR文件的大小。每次生成JAR文件后,都会更新此只读属性。

-Profile。所需的JavaME配置文件,它使用与系统属性profiles相同的格式和值(例如MIDP-10)。

-。所需的JavaME配置,它使用与系统属性相同的格式和值(例如CLDC-10)。

MIDlet-Description。MIDlet套件的描述。

MIDlet-Icon。JAR文件内的PNG文件名,用于表示MIDlet套件。应用程序管理软件显示了标识此套件的图标。

MIDlet-Info-URL。一个URL,提供进一步描述MIDlet套件的信息。

MIDlet-Data-Size。MIDlet所需的持久性数据的最少字节数。设备可以根据其自身的策略提供额外的存储。

首先你的程序在编译器下点清理并生成,然后会生成一个jar文件和一个lib文件夹把这两个同时给别人

然后对方电脑应该安装jre,双击jar文件就可以运行了,jar文件不能和lib分开

在编写好的java包上右键--export。

下面是简单的一个java小程序,可以用来做测试

public class Main {    public static void main(String[] args) {        JFrame frame = new JFrame();        JPanel panel = new JPanel();        JTextArea textArea = new JTextArea();        panelsetLayout(new GridLayout());        textAreasetText("           Hello world\n          Today is "+ new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss")format(new Date()));        paneladd(new JScrollPane(textArea));        frameadd(panel);        framesetSize(500, 500);        framesetVisible(true);    }}

2、在Export对话框中,选择要导出的JAR File,也可以使用模糊查询输入关键字“jar”

3、选择导出的目录位置

4、注意导出的后缀是jar格式的文件

5、选择程序的入口,也就是main方法所在的类中。然后点击Finish,完成后,会在导出的目录中找到对应的jar文件。

6、测试导出的jar是否正常,使用java -jar命令进行测试。

首先进入jar所在的目录,然后执行: java -jar XXXjar 命令

7、如果使用上面步奏的代码,会d出一个windows框,表示导出正常。

注意事项

使用java的过程中,最好不要有中文的名称或者目录。

如果java环境变量没有配置,可以搜索:百度经验“如何安装java以及如何配置java环境变量”进行配置

一 jar命令用法:

在cmd命令窗口下输入jar,回车,就会提示改命令的用法:

二例子(这里介绍的都是生成双击可执行的jar包):

1首先介绍如何在命令行下执行打包程序。

11没有包结构的最简单的工程。

(1)在c:盘下新建文件“HelloWorldjava”:

1 public class HelloWorld

2 {

3 public static void main(String[] args){

4 Systemoutprintln("Hello world!");

5 }

6 }

(2)在命令行下输入c:\javac HelloWorldjava,在c:盘下编译生成“HelloWorldclass”。

(3)在c:盘下新建文件“menefest”(没有后缀名):

Main-Class: HelloWorld

注意最后要有一个空行,否则会出现找不到类的错误。

(4)打包:输入c:\jar cvmf menifest HelloWorldjar HelloWordjar HelloWorldclass,在c:盘下生成“HelloWorldjar”。

(5)执行:输入c:\java -jar HelloWordjar。屏幕回显“HelloWorld”。

12有包结构的java工程。

(1)在c:\com\gosyl\demo\下新建文件“HelloWorldjava”:

package comgosyldemo;

public class HelloWorld{

public static void main(String[] args){

Systemoutprintln("HelloWorld");

}

}

(2)在命令行下输入c:\javac com/gosyl/demo/HelloWorldjava,在c:\com\gosyl\demo\文件夹下编译生成“HelloWorldclass”。

(3)在c:盘下新建文件“menefest2”(没有后缀名):

Main-Class: comgosyldemoHelloWorld

注意最后要有一个空行,冒号后面要一个空格。否则会出现找不到类的错误。

(4)打包:输入c:\jar cvmf menifest2 HelloWorldjar HelloWordjar com/,在c:盘下生成“HelloWorldjar”。

(5)执行:输入c:\java -jar HelloWordjar。屏幕回显“HelloWorld”。

13引用到外部jar包的java工程。

(1)在c:\com\gosyl\demo\下新建文件“Carjava”:

package comgosyldemo;

public class Car

{

public static void main(String[] args){

Lighton();

}

}

(2)在c:\com\gosyl\demo\下新建文件“Lightjava”:

package comgosyldemo;

class Light

{

public static void on(){

Systemoutprintln("Light is on!");

}

}

(3)打包1:输入c:\jar cvf Lightjar com/gosyl/demo/Lightclass,在c:盘下生成“Lightjar”。

(4)在c:盘下新建文件“menefest-car”(没有后缀名):

Main-Class: comgosyldemoCar

Class-Path: Lightjar

注意最后要有一个空行,冒号后面要一个空格。否则会出现找不到类的错误。

(5)打包2:输入c:\jar cvmf menifest-car Carjar com/gosyl/demo/Carclass,在c:盘下生成“Carjar”。

(6)执行:输入c:\java -jar Carjar。屏幕回显“Light is on”。

三总结

1清单文件menifest,对格式要求很高,注意每个冒号后面要有一个空格,文件最后要有一个空行。

2对于引用到外部jar包的工程,需要在manifest中定义好Class-Path属性。

3对于双击bat文件出现刷屏现象的情况,请直接把bat文件的内容键入命令行执行。

4对于重复签名的jar包,在META-INF里面会出现多个签名文件,删除掉多余的,保存其中一个才能保证jws正常启动。

以上就是关于JAVA打包jar文件的方法,高分相求全部的内容,包括:JAVA打包jar文件的方法,高分相求、求Java程序打包成可执行jar的工具或者方法、JAVA写的小程序,如何在别人的电脑上运行请高手们说详细一点。谢谢。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10177479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存