您现在的位置是:首页 > 学无止境
JAVA项目的打包
第一步:创建项目
打开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就可以了。
文章评论
- 登录后评论
点击排行
-
php-fpm安装、配置与优化
转载自:https://www.zybuluo.com/phper/note/89081 1、php中...
-
centos下postgresql的安装与配置
一、安装(以root身份进行)1、检出最新的postgresql的yum配置从ht...
-
Mysql的大小写敏感性
MYSQL在默认的情况下查询是不区分大小写的,例如:CREATE TABLE...
-
关于URL编码
转载自:http://www.ruanyifeng.com/blog/2010/02/url_encoding....
-
header中的Cache-control
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的...