java为什么要打包成exe 如何将java程序打包成exe
大家好,如果您还对java为什么要打包成exe不太了解,没有关系,今天就由本站为大家分享java为什么要打包成exe的知识,包括如何将java程序打包成exe的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
java怎么打包成jar
^^java教程^^《制作可执行JAR》本文阐述了如何把一个不可执行的 JAVAArchive(JAR)文件变成可执行,而不用直接操作manifest文件。你会学到写出短小的一个程序,通过运行java-jar命令或在像windows一样的操作系统里面用双击鼠标运行任何JAR文件。
你可以很容易地把应用程序的一整套class文件和资源文件打包到一个JAR中。事实上这就是jar文件存在的一个目的。另外一个目的就是让用户能很容易地执行被打包到jar文件里面的应用程序。那么为什么jar文件仅仅作为文件在整个java里面占据了次要的地位,而本地执行则被忽视?
要执行一个jar文件,你可以使用java命令的-jar选项。举一个例子来说,假如你有个名叫myjar.jar的文件。这个jar是可以运行的,你可以运行它:java-jarmyjar.jar.另外一个办法就是,当JavaRuntimeEnvironment(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""<jarfile><Main-Class><output>");
System.exit(0);
}
请注意参数列表是如何描述的,因为这在以下代码中是很重要的。参数的次序和内容不是固定的;
然而,如果你要改变他们的话,要记住响应修改其他代码。
访问jar和jar的manifest文件
第一,我们必须创建一些了解jar和manifest的对象:
//CreatetheJarInputStreamobject,andgetitsmanifest
JarInputStreamjarIn=newJarInputStream(newFileInputStream(args[0]));
Manifestmanifest=jarIn.getManifest();
if(manifest==null){
//Thiswillhappenifnomanifestexists
manifest=newManifest();
}
设置Main-Class属性
我们把Main-Class入口放到manifest文件的main属性部分。一旦从manifest对象获得这个属性,就可以设置需要的 mainclass。然而,如果main-Class属性已经存在原来的jar当中又如何呢?这里我们只是简单地输出一个警告然后退出。我们能加入一个命令行参数告诉程序使用新的值,而代替了旧的那个:
Attributesa=manifest.getMainAttributes();
StringoldMainClass=a.putValue("Main-Class",args[1]);
//Ifanoldvalueexists,telltheuserandexit
if(oldMainClass!=null){
System.out.println("Warning:oldMain-Classvalueis:"
oldMainClass);
System.exit(1);
}
输出新的JAR
我们需要创建一个新的JAR文件,所以我们必须使用JarOutputStream类。注意:
我们必须确定我们不用跟输入文件相同的名字作为输出文件的名字。还有一个方案就是,程序应该考虑到一种情况,就是两个jar文件都是相同的,促使用户覆盖原来的文件,如果他愿意这么做的话。然而,我在保留了这一点,作为读者的一个练习。从如下代码开始:
System.out.println("Writingto" args[2]"...");
JarOutputStreamjarOut=newJarOutputStream(newFileOutputStream(args[2]),manifest);
我们必须从输入JAR写每个表项到输出的JAR,所以迭代每个表项:
//Createareadbuffertotransferdatafromtheinput
byte[]buf=newbyte[4096];
//Iteratetheentries
JarEntryentry;
while((entry=jarIn.getNextJarEntry())!=null){
//ExcludethemanifestfilefromtheoldJAR
if("META-INF/MANIFEST.MF".equals(entry.getName()))continue;
//WritetheentrytotheoutputJAR
jarOut.putNextEntry(entry);
intread;
while((read=jarIn.read(buf))!=-1){
jarOut.write(buf,0,read);
}
jarOut.closeEntry();
}
//Flushandcloseallthestreams
jarOut.flush();
jarOut.close();
jarIn.close();
完成程序
当然,我们必须把这些代码放到一个类的main方法里面,并且需要一大堆import代码。完整程序:
http://www.javaworld.com/javaworld/javatips/javatip127/MakeJarRunnable.zip
程序使用例子
让我们把这个程序应用到一个例子里面来。假设你有一个应用程序,该程序的入口点是一个叫HelloRunnableWorld的类,再假设你已经创建了一个jar叫myjar.jar,包含了整个程序。运行MakeJarRunnable:
javaMakeJarRunnablemyjar.jarHelloRunnableWorldmyjar_r.jar
正如前面提到的,注意一下我的参数顺序。如果你忘记了顺序,没有参数运行一下程序,它会响应出现一个用法提示信息。
尝试对myjar.jar运行java-jar命令。然后对myjar_r.jar。注意区别不同!好了,你完成了这一切了,浏览一下每个jar的manifest文件(META-INF/MANIFEST.MF)
java程序转化成EXE文件
不错。是可以把jre大包在里面。运行的时候自动安装。
但是jbuilder只提供了打包程序成exe,没有打包jre的功能,要使用打包jre的功能,不妨用专门的打包发布工具,然后写个执行脚本即可!
鉴于这个问题一直有人在问,所以这次在文摘栏目来篇专稿说明^-^谨以此文献给本站好学的会员mengya老师。
下面的图示是从JBuilder9截取,基本上对于版本7、8、9、X、200X来说类似。
点击Winzards菜单,选择Native Executable Builder菜单项目;
接下来进入Native Executable Builder Wizards,总共分7步:
第一步:如下图,在Name字段处给你的可执行程序命名,缺省名称为Native Executable,File是填写所需要生成的jar的名字和选择存放的位置,Compress the content of archive表示是否把jar文档里面的内容进行压缩,下面的checkbox代表是否在build项目的时候生成jar文档;
第二步:选择需要打包进jar的包、类、以及资源文件,也包括任何其他需要的文件,include class dependencies代表是否在jar包中包括所依赖的类(例如你用了一个第三方库的时候,以及其他引入的非java核心库的类),点击“Add Filters...”可以指定包括的包、类,点击“Add Files...”添加需要包括的资源文件等。
点击“Add Filter...”后出现Add Filters的窗口,如下图:
这里主要是定制过滤器,以确定包含哪些类,存在两种形式的Filter:include(包含)和exclude(排除)。可以直接对package包,也可以直接对class类,一般情况下,你在这里选择包含main方法那个主类就行了,前提是在上一个图中选中“包含依赖类”的checkbox。
Add Files就比较简单了,直接增加文件就行了,例如你程序需要的图片、配置文件等。
第三步:确定如何处理依赖库。下面图中的列表中列出来你在本项目中引入的库。
上面列出针对每个库的四种处理方式,按顺序依次是:
1、从不包含任何类和资源;
2、包含必要的类和已知的资源;
3、包含必要的类和所有资源;
4、总是包含所有类和资源;
对于每个库的默认选项都是第一个,有时候你制作的Exe会出现找不到类的错误,就可能是这里没设置好。
第四步:设置jar文档的manifest(打包清单)项目。默认是包含,并自动创建一个,一般情况下按默认设置就行了。
第五步:选择确定应用程序主类的方法。
有两种方式可以指定:1、从指定的runtime configuration中选择一个运行配置来确定,runtime configuration就是下图中下拉表中的选项:
2、直接指定一个主类(就是包含main方法的那个类)。
第六步:选择需要生成的可执行程序类型。有五种类型可供选择:
1、Window FUI类型;
2、带控制台console(就是dos窗口)的window exe类型;
3、linux下的可执行文件;
4、solaris下的可执行程序;
5、Mac OS下的可执行程序;
在这一步就可以点击Finish生成了,第七步是可选的。
第七步:运行时配置选项的设置,一般情况下这一步是不需要的,高级用户也许需要,这一步干什么用的你可以看上面的说明^-^
Finish结束了。
然后的JB左侧项目文件浏览器中就会出现如下一个图标,名字是你在第一步中指定的名字:
在此项目上鼠标右击,选择make或者rebuild就OK了。
然后在你的项目目录中就出现了一个EXE文件。
这个过程的一个副产品就是同时生成了一个可执行的jar文件^-^
说明:这里生成的EXE和普通的window exe程序是有区别的,你鼠标右击该exe文件,看看属性,原来就是个压缩文件,不过这个压缩文件和普通的压缩文件有点区别,你自己慢慢看吧,还可以解压缩后看^-^,显然这不是真正的EXE文件,也就是说还需要JRE环境支持。
如果要生成真正的EXE可以使用其它工具,例如:jet-103-eval-win32.exe,该软件能够把java class编译成无需 JVM支持的 32位 Windows可执行文件。jet-103-eval-win32.exe这个文件的下载本站原来有,但是现在找不到这个程序了。
如何将java程序打包成exe
将java编织成.class后,如果只是用java命令来执行总觉得不是太过瘾,找个办法生成像exe文件一样用鼠标双击便可执行的文件,应该是很有趣的啊。这里我用了一个名字叫做exe4j的免费小软件,感觉不错。
首先,当然是要下载个exe4j。我的是2.2版本的,license:L-g782dn2d-1f1yqxx1rv1sqd。
接着,将你要选择好你即将发布的.class文件就不用细说了。下面是创建jar文件,这里我用一个名字叫做d:MyJavaTest.class的文件来举例,另外注意还要编写一个确定main_class的文件manifest.mf,在这里mainfest.mf和目录MyJava是在同一个目录下(这里是都在D:),然后使用如下命令:
jar cvfm test.jar manifest.mf MyJava
manifest.mf当初还不知道怎么写,非常的抓狂。。。呵呵。其实很简单,代码如下:
Manifest-Version: 1.0
Main-Class: MyJava.Test
Created-By: Hanic
只要Main-Class写对就可以了。这样,一个test.jar文件就生成了,这里我就不细说jar的具体功能了。但为了确保成功,我们可以再用下面的指令执行一下刚刚生成的test.jar:
java-jar test.jar
怎么样,是不是可以很顺利的进行?如果是,那我们就可以开始进行可执行文件的创建了。
exe4j应用起来倒是相当简单。类似于傻瓜式的,只要一路next,填写和选择个别的参数就ok了。稍微懂点e文的都可以应用自如了。不要说你一点e文都不懂啊!没办法,简单说下流程:
1、打开exe4j,可以输入license,可以打开你以前操作过的config文件。
2、单击NEXT键,选择”JAR in EXE”mod按钮,单击NEXT。
3、填写短名和文件输出的路径然后点击NEXT。
4、在这里你可以选择你要生成的可执行文件的类型,以及生成的可执行文件名称、可执行文件的图标等,我们在这里就选择GUI application,名字就根据自己的需要取一个,图标你可以自己在你的图标库里选一个你喜欢的,然后再NEXT。
5、在这里填写Main class的名字,单击绿色+选择所需的.jar文件,如果没有特殊要求我们就可以再继续了。
6、接下来是选择版本,填写好自己的最大最小版本然后再继续。
7、下面设一下你的文件执行的片头,增加其美观效果,选择自己喜欢的图片,写自己想写的文字,并可以根据需要调整文字的位置,再继续。
8、下面是一个选择语言版本的界面选好后再继续。
9、下面是一个短暂的等待,然后就大功告成了,一个java写成的可执行文件就这样生成了。
10、双击一下看看效果,迎面而来的是自己设置的开头效果
文章到此结束,如果本次分享的java为什么要打包成exe和如何将java程序打包成exe的问题解决了您的问题,那么我们由衷的感到高兴!