eclipse中SWT程序的打包发布
前言
创建的程序可以打包发布,使其能够脱离Eclipse单独运行。对于SWT程序,需要添加swt的相关jar依赖包。
一、导出jar包
方法一:直接导出Runnable JAR file
直接导出Runnable JAR file。
选择导出的项目,以及要导出到的位置。
这种方法导出的jar包可以直接运行,操作简单。但是jar包很大,里边貌似导出了一些别的东西。
方法二:导出JAR file
导出JAR file。
选择要导出的项目,以及导出位置,其他默认。
到最后一页时,一定要选择程序入口函数Main class。比如book.ch2.HelloSWT,代码中是下面这种形式。
至此成功导出一个jar包。
二、运行jar包
选择导出Runnable JAR file的jar包,可以双击运行,或者命令行运行:
选择导出JAR file的jar包,运行时会遇到一些问题。
问题一 错误: 找不到或无法加载主类 book.ch2.HelloSWT 原因: java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Shell
根据第一句的提示是没有找到主类,第二句是swt的依赖没有加好。那么首先确定一下主类是否在,这个主类就是之前jar包打包时的入口函数。
打开jar包,这里我用的7z压缩工具打开。找到里边的MANIFEST.MF,查看到确实有Main-Class: book.ch2.HelloSWT。
那么给这个jar包添加一下swt依赖,swt的依赖包可以从eclipse的plugins文件夹里边找。注意Class-Path格式,冒号后边一定要有空格。最后将swt依赖与jar包并列放在一个文件夹里。
最后双击运行,或者命令行运行就ok啦!
问题二:修改MANIFEST.MF文件时用压缩工具解压之后再压回去,运行报错
改后缀并不是个万全的方法,这种时候要用jar命令行来解压缩。
解压:
jar -xvf helloSWT.jar
压缩:
jar -cvfM helloSWT.jar META-INF/MANIFEST.MF book/ch2/*.*
其中META-INF/MANIFEST.MF是MANIFEST.MF文件在当前文件夹test jar包的位置,book/ch2/. 是HelloSWT.class文件的位置,*.*代表是打包ch2文件夹里全部内容。
之后就可以得到可执行的jar包啦!
要注意的是,压缩jar包千万不要用下边这个命令啊!!
这个命令看似压缩是没有问题,但一定要注意看这个MANIFEST.MF,我们刚刚写好的什么Main-Class,Class-Path都消失了啊!!没有Main-Class就意味着又会出现问题一里边无法找到主类的错误了啊,白改了啊,所以一定不要用这个压缩命令。
强烈建议压缩完jar包以后看一下,确认目录是你想要的,MANIFEST.MF配置也对,避免做白工。
总结
怕麻烦就直接导出Runnable JAR file,也能用;
导出JAR file的话,注意MANIFEST.MF的配置,使用jar命令解压缩后一定要看一下是不是自己想要的格式。