JAVA项目打包生成.exe文件

JAVA项目的打包及生成.exe文件

原址:http://blog.csdn.net/jbgtwang/article/details/3492221
总体思路是先打成jar再把jar打成exe。主要看1.3和2.3里的内容就可以了。

1.将项目打成jar:
1.1要将项目打包成jar文件,方法很多,可以用Eclipse自带的打包工具Ant打包,也可以用Eclipse的Export生成jar。经过尝试后,我不推荐用Ant打包,因为要自己编写xml脚本语言,还要增加一些外部的jar。


1.2在这里介绍两种方法生成jar,第一种是用Eclpise的Export功能。在要打包的项目上击右键,选择Export,在窗口中选择Java里的JAR file。Next后的窗口中已经自动选好了要打包的项目,用户可以点击加号查看项目里被打包的内容。在下面的JAR file里设置你打包生成jar文件的输出目录,下一步在出现的窗口中选择Use existing manifest from workspace,在下面的Main class后面直接点Browse,它会自动列出你项目中有主函数main的类。选择主类后点Finish即可生成jar文件。在此说明一下,这种打包方法不能把项目中的外部的jar包打进来,因该是也要编写一些脚本语言,没往深研究。所以生成后的jar有些是不能执行的。
1.3第二种方法是利用Eclipse的一个第三方插件fatjar生成jar文件,也是本人觉得最简单最方便的一种生成方式。先从网上下载些插件,解压后是一个plugins的文件夹,里面只有一个文件夹,我的是“net.sf.fjep.fatjar_0.0.24”将它copy到Eclipser plugins文件夹下,此插件就安装成功了,重启Eclipse在项目上右击就会看到多出一个“Build Fat Jar”在前面有个绿色的“+”号,这时你就可以用此插件打包你的项目了。进去后第一个界面Jar-Name里增入要生成的jar文件名,我的是“CAMP_fat.jar”。在Main-Class后点Browse像Export一样它也会列出你项目中的主类,选择后其它默认即可,Next后会列出你要打包的所有内容,这个插件的优势就是可以将你项目中的外部jar也打进来,有三个先项,其中Export ANT是生成build.xml脚本文件,方便用户以后修改脚本,其它两个按钮没用。在这里什么都不点,直接点Finish就可以生成jar文件。
2.将jar打成.exe文件:
2.1 虽然此时的jar文件已经可以执行了。生成.exe的文件我也是用两种方法实现的,用到的打包工具是j2ewiz和exe4j,它们的不同会在我下面的介绍中体现出来。
2.2 首先是j2ewiz,这个软件是绿色的,不用安装,解压后可以直接运行,但这个软件生成的 .exe文件不是跨平台的。运行此程序首先就是输入要打包的jar文件,我们浏览JAR选择我们之前用fatjar生成的“CAMP_fat.jar”项目文件(详见1.3),下面那个选项是提示用户最低要求的JRE版本,一般选1.3。下一步,因为我们的寝室管理系统是图形界面,所以在这里选“Windows窗口程序”下一步它也是自动生成要执行的主类,你只要选择就可以。下面的选框可以选择你启动程序显示的图片。下一步后这个窗可按个人喜好选择。下一步,如果你的程序还有什么依赖的外部jar文件,可以从这里加上,但因为之前的fatjar以经将我们项目所用的那三个连数据库的外部类打进CAMP_fat.jar包里了,所以这里不用再添加。如果你之前是用Export打的jar 包,那么这里就需要再把那个三个数据库的包加进来了(详见1.2)。下一步是添入要生成的.exe文件名,再选一个程序图标就可以了,下一步后生成.exe文件,点完成。双击生成的.exe文件就能看到运行效果了,这种exe文件还没有脱离JDK环境,还不能跨平台使用,只能用于小组成员测试使用。
2.3 下面进入最关键的,如何打包跨平台的.exe文件。用到的软件是exe4j,我用的是V4.0版的,此软件需要破解。安装后运行左窗窗口标有十步,其实打包过程也非常简单。第一步完全略过,直接点Next第二步我们选择“JAR in EXE mode” 就是选择我们已经有制作好的jar文件。第3步上面是项目名称,可随便填写,下面一个写出你想要将打包后的exe文件输出的目录我的是“桌面/project/”。第4步,由于我的演示程序是图形的,所以选第一个,如果你的程序是控制台的,则选择第二个,Executable name写你将要生成的.exe文件的名字,Icon File可以选择生成文件的图标。第5步,先别管上面的,先在下面单击绿色的“+”号,在弹出的窗口中点Archive,然后找到起初已经做好的CAMP_fat.jar(详见1.3)文件,"OK"后返回,在下面的Class Path里就出现jar文件路径后,再在上面Main Class栏内点击找到main所在的类。第6步,你系统的JRE版本,一般是填个1.3,下面填1.6在这里单击advanced options,选择search sequence。选这个就是因为我们要把JDK环境也打包进来,好让程序能跨平台使用。首先要从你系统的JDK下的JRE目录copy到你.exe文件的输出目录下“桌面/project/JRE”,然后回到exe4j中在弹出窗口删除列表中的所有项。我的是三项,一个注册表的,一个JAVA环境变量的,一个JDK环境变量的,都不要。然后单击绿“+”,选择directory并选择JRE的根目录,我的是“桌面/project/JRE”就是copy后的目录,选完后exe4j弹出窗口中的Directory里会显示“./JRE”。点OK关闭该窗口,返回exe4j的主窗口,你就可以看到刚加的路径。再从主窗口左侧窗口中单击advanced options,并选择preferred VM,在弹出的窗口中选择client hostspot VM,单击next按钮继续。7、8步是一些个性设置默认即可。第9步编译完后第10步你点那个“Click Here to Start the Application”按钮就可以看到程序运行效果了,然后再点”Seave as”保存一个exe4j生成的一个文件,随便存哪里都行,和我们的.exe程序无关。全部制作过程就完工了。
另一篇文章:
第一步:创建项目
打开Eclipse,新建一个Java项目,名叫TestSWT,手动追加一些必要的目录后结构如下:

/bin - 这个是class编译输出路径
/dll - 此目录存放SWT解压出来的那些dll文件(简单应用的话swt-win32-****.dll这一个文件就够了)
/lib - 此目录用来存放swt等开发需要的jar文件
/src - 此目录为源代码目录
/jar - jar文件的输出路径
/META-INF - 存放可执行JAR需要的MF文件

这里我选用的swt包是Eclipse/plugins下面的swt包,一般其名称类似于org.eclipse.swt.win32.win32.x86_****.jar,
其中的****是版本号,各人的可能不太一样。

上面说明目录的时候提到的dll目录,里面存放的dll文件可以直接从org.eclipse.swt.win32.win32.x86_****.jar这个包里解压得到,简单应用就只把swt-win32-****.dll复制过去,或者都复制过去(一共能解压出来6个dll)也行,其余5个都比较小。

第二步:编写代码
然后编写一个测试用的窗体:

package cn.indoing.test;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class MainForm
{
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("Test!!!");
shell.setVisible(true);
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();

}
}

在这里顺便说一下,其实本不用把swt-***-****.dll复制到系统盘符的windows/system32下,那个目录内容的多少影响系统速度(个人感觉,不一定准确),所以我们采用另外一种方式。

在eclipse里,让上面的MainForm编辑窗获得焦点,然后点击右键,选择Run As -> Open Run dialog ... ,选择右面(X)=Arguments标签,在下面的VM arguments里追加-Djava.library.path={$workspace}/TestSWT/dll,这里的{$workspace}是你的eclipse的workspace的目录,不要直接把这个复制过去才好,呵呵。然后点击Run就可以了。

第三步:创建配置文件
在META-INF目录下新建一个名为MANIFEST.MF的文本文件,这个文件小心点儿,格式要求的很严格,一个空格都不能错,如果Class-Path项有很多jar包,请写在一行,相邻的两个jar包之间用一个半角空格来分割。本例内容为:

Manifest-Version:(空格)1.0
Main-Class:(空格)cn.indoing.test.MainForm
Class-Path:(空格)./lib/org.eclipse.swt.win32.win32.x86_3.3.1.v3346i.jar

第四步:创建批处理文件
在项目的根目录下新建一个jar.bat文件,修改其内容为:

@echo off
cd jar
rmdir lib /s /q
del test.jar /f /q
cd ../bin
jar cvfm ../jar/test.jar ../META-INF/MANIFEST.MF cn/
cd ../jar
mkdir lib
copy ../lib/*.* lib/
copy ../dll/*.* lib/

可以了,编译好源码后,在资源管理器里找到本项目的目录,双击执行jar.bat即可。
在/jar目录下会生成一个test.jar和一个lib目录,双击test.jar试试看?

其他说明
jar文件通常有两种启动方式,一种是双击运行,一种是DOS提示符下运行,先予以分别说明。

•双击运行
这种运行方式是最直接最简单也是大家特别习惯的运行方式,最终成品发布估计多数都是这样运行,但是这种方式不利于开发期的测试和调试,因为双击模式默认是界面操作模式,所以一些本来打在控制台的错误信息我们就无法获得,万一程序真的在某个地方有问题,从直观上是根本看不到任何反映的。另一种情况,也是非常令人头疼的情况,就是明明在Eclipse跑的好好的,作成Jar文件双击就不好用,然后解压回去或者回到Eclipse发现还好用,这样的情况初学者比较容易常见,原因多数情况是配置的问题,那么为了迅速的找到问题的原因,就要采用下面的运行方式——DOS提示符运行。

•DOS提示符下运行
在DOS提示符下进入Jar包所在目录,然后执行 java -jar {$yourfilename}.jar。正如上面所说, 在DOS提示符下运行Jar文件,默认方式是控制台方式,那么任何我们以前可能在Eclipse的Console里看到的log信息现在都能看得到,假如真的出现上面提到的第二种情况,那么一眼就可以看出是否缺少dll文件还是其他问题了。

aaa

常见错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3236 in java.library.path
这个错误最初容易出现在Eclipse开发过程,通常是dll文件的存放位置不对,或者可以说配置参数没有写好,解决办法请先参考上面提到的加运行参数方法,如果还是不行那么先把swt-win32-3236.dll放到windows/system32下吧(实在没办法再放进去,总往system32里添加东西不是好事儿)。如果还是不行——,这是我刚才想到的,那么要注意一下是不是版本不对,例如提示说swt-win32-3236找不到,发现dll文件是有,但是后面却不是3326,这个现象没试过,猜测有可能发生。

Invalid or corrupt jarfile test.jar
MANIFEST.MF文件格式不对,很有可能多了或少了空格,记住每个冒号后面有且只有一个半角空格。

Exception in thread "main" java.lang.NoClassDefFoundError: cn/indoing/test/MainForm2
Main-Class的内容写错了,例如本例中明明是MainForm,这里却写成了MainForm2(当然只是举例子,实际上这样的事情是不会发生的)。

其他的错误情况我还没想到,如果你参考我的流程来做发现有其他问题,请跟贴告诉我,共同学习。

“画蛇添足”
按照上面的流程,我们做好了jar文件,可以通过双击执行了,但是有一点可能不是令人十分满意,那就是发布的时候还要把lib包一起带着。那么能不能作成只有一个jar文件就够了呢?

经过测试,可行,不过不敢说自己的方法是最简洁的,现说明如下:

不知道上面解压org.eclipse.swt.win32.win32.x86_****.jar时的东西还在不,不在就再解压一次。里面有个org目录,6个dll和其他几个说明文件,我们要做的是用解压缩软件(例如7z,winRar,winZip等等)打开test.jar,注意,是打开即可,不用解压。还是参考本例中的test.jar,请只保留cn目录和META-INF目录,其他文件一概全部删除,然后用鼠标点选swt解压包里的org目录和6个dll文件到当前test.jar里,软件会问你是否加入,确认。然后进入test.jar里的META-INF文件夹,先把MANIFEST.MF拖拽出来,用文本编辑器打开,删掉classpath那行,保存后再拖拽回去,OK,一个崭新的单文件可执行jar文件就做好了。

这一套也不太麻烦,不过如果以后想省事儿的话建议把这个但文件的test.jar留着(我这里显示1.74M),以后做别的SWT项目想作成单个儿的可执行JAR文件时只要把这里的cn目录删掉,换成你自己的开发目录,再把MANIFEST.MF弄出来修改一下main-Class就可以了。

EXE4J注册码:L-g782dn2d-1f1yqxx1rv1sqd没有注册码的话生成的exe文件执行时会有EXE4J的提示,很不爽.
 

java打包-exe文件-最终以setup形式发布的解决之道

首先,将编译好的程序打包成jar文件,然后做出exe,这样代码就不可见了;但是exe文件在没有安装jre的电脑上不能运行,如果要求客户再去安装jre 设置环境变量 就不雅了。我们需要将jre打包。

这几步操作网上介绍的插件和方法很多,但有的好用有的不好用,而且有的还需要注册。经过尝试比较,在“千里冰封”的博客上得到了很大的帮助。整理一下。使用这几个工具,您也可以顺利的发布您的java程序!

1 打包成双击可执行的jar文件。
推荐插件:fatJar(Eclipse使用)
下载地址 http://sourceforge.net/project/showfiles.php?group_id=115990&package_id=125924

我用的是Eclipse,它自带的打包方法在打包一些图片等资源时不是很爽。可以使用这个插件。
安装方法解压后将plugins文件夹下的net.sf.fjep.fatjar_0.0.24文件夹拷到eclipse安装目录的plugins 下。
用此工具可以方便的将eclipse中的工程打包成jar文件。如果是要打成可执行的jar请注意选取主类。
你的项目=〉Export..=>向导里有fat jar =>...


2 将jar文件转换成exe文件。
推荐工具:exe4j

用exe4j把java打包成exe
http://www.blogjava.net/hadeslee/archive/2007/10/12/152228.html
在我们写程序的时候,有时会有一种需求,那就是希望我们的程序是一个可执行文件,而不是一个jar文件,其实大部份时候,可执行的jar文件都可以满足要求,但是如果我们的程序是需要保护的,那么打包成jar文件就不太安全了,因为jar文件就是一个解压缩文件,一解压就什么都能看到了,当然也可以选择混淆,但是混淆了以后排错就没那么容易了,因为混淆的时候,把一些类的信息都混淆了。如何既保证代码的安全又容易排错呢?那么打包成exe就是一种很好的办法了,其实我今天介绍这个方法并不是希望大家去打包成exe文件,因为exe文件毕竟不是跨平台的,用了exe的格式就失去了java的初衷了。

exe4j可以打包成各种格式的exe,可以把jar打包进exe,也可以引用一个外部的jar文件,还可以打包成windows服务的程序,并且可以设置最低jre的版本,还可以设定启动画面,虽然java6.0已经实现了这一点,但是还是没有exe4j生成的启动画面快。


3 将exe文件并jre打包成安装文件 可以在没有安装java虚拟机的电脑上运行
推荐工具:install4j

Install4j介绍
http://www.blogjava.net/hadeslee/archive/2007/10/15/152855.html
install4j是一个功能强大的,多平台Java安装文件生成工具,用于生成Java应用程序本地化的安装及应用程序发布。 install4j 的优异性在于它易于使用,紧密的集成到目标平台,以及灵活的JRE 管理与部署选项。

创建发布树
install4j的图形用户界面允许你:

    * 完全自定义发布树
      在发布树的每一个目录中,你能设置整个目录内容或是磁盘上任何目录的单个文件。定义的视图与结果视图让你能完全控制安装程序将发布的文件。
       
    * 处理特定平台的差异
      install4j提供方便的“包含/排除”机制,使其适应平台方式来进行发布。
       
    * 针对Unix, Linux 及Mac OS X所定义的文件权限
      对发布树的每一个元素,当其安装在类似于Unix这样的平台上时,你能自定义用户访问的权限。
       
    * 定义优良的卸载策略
      对发布树的每一个元素,你能决定在卸载时是否删除它。
       
    * 定义覆盖策略
      对发布树的每一个元素,你能配置不同的覆盖策略,当安装过程中需要覆盖文件时,这些覆盖策略会指示nstall4j进行相应的操作。
       
    * 定义安装的组件
      你能定义文件及目录的分组,形成分离的安装组件,这样你就可提供给用户来选择只安装一定的组件。

其实一个好的应用如果不太好布署,那么别人也只能对它望而兴叹了,现在有了install4j,很多布署的问题几乎全部解决了.我们可以用exe4j打包java应用,然后用install4j发布java应用,以前java程序布署难的问题,现在几乎都解决了.install4j不但用于打包很合适,并且它还提供了一组很强大很实用的与平台相关的api.这些对于扩展我们的程序也是有很大的帮助的.

 

利用install4j打包成exe安装文件步骤

1、进入install4j界面,先对General setting进行设置。首先设置要打包的工程名字,包括版本号1.0 build20100321,全称Article Retrieval,简称lyz等。系统界面如下:

按右上角的右箭头,跳入下一个窗口。输入最小的jre版本号1.5,最大的为空。如下图:

再按右箭头,选择安装界面的语言。第一个为中文。

再跳入下一个窗口,这里选择生成exe文件后所在的路径及生成的EXE文件名称继续next到下一选项。

2、进入File选项,点击New Folder新建文件夹disc,再点击Add Files按钮选择要打包的jar文件及相关文件所在的路径。如图所示:

 

按NEXT,在这个窗口里,是选择那些文件不打包的。打上勾的为不打包。一路NEXT到下一个窗口。

3、进入Launchers选项,双击new launchers图标,在新弹出的窗口里在Executable name里输入要

生成的exe文件名,这里我输入lyz,下面的directory里输入“.” 即可,选中前两个复选框。

点击下一步,在下一个窗口里要输入两个小图标,分别是16*16,32*32的。格式为png的格式。

 

再点击一步,先在class path里添加上需要的六个引用的jar文件,以及.class文件所在目录。如下图:

然后在main class选择我系统的程序入口。一路next到OK。

完成上述操作,生成如下lyz文件:

 

4、进入Install,点击右上角的右箭头,跳到Actions标签窗口。选中Create program group,后,在右边window->program group name里输入名称,即点击开始->程序后,所看到的名称。

再点击右箭头,直接将disc文件添加进来,即将该目录下的所有文件也打包。一路按右箭头,跳到media。

5、进入Media,双击new media file图标,在新的窗口里选择生成文件的操作平台,选上window,

 

再按next,在第一个文本框里输入${compiler:sys.fullName},意思是该文件的全称。在下面的文本框里输入要安装该软件的路径,一路next到第6步bundlen JRE,这里我选择生成一个自带JRE的EXE程序,选中已经下载JRE。如下图:

 

再按next到第7步,在第7步里,点击exclude file,在窗口中你可以筛选一下那些文件不要生成,选中为不生成。一路next到ok.。

6、进入Bulid,有Test Bulid和start Bulid,在确定没有错的情况下就可以生成EXE文件了。如下:

7、结束上述生成过程,生成如下所以的图标,安装后双击lyz.exe的企儿图标即可运行:

 

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页