zoukankan      html  css  js  c++  java
  • JAR项目的打包

    总体思路是先打成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就可以了。

  • 相关阅读:
    204. Count Primes (Integer)
    203. Remove Linked List Elements (List)
    202. Happy Number (INT)
    201. Bitwise AND of Numbers Range (Bit)
    200. Number of Islands (Graph)
    199. Binary Tree Right Side View (Tree, Stack)
    198. House Robber(Array; DP)
    191. Number of 1 Bits (Int; Bit)
    190. Reverse Bits (Int; Bit)
    189. Rotate Array(Array)
  • 原文地址:https://www.cnblogs.com/dartagnan/p/2003505.html
Copyright © 2011-2022 走看看