Thursday, November 5, 2015

pack an eclipse project to jar file

 一.工程没有引用外部jar包时(J2SE)
选中工程---->右键,Export...--->Java--->选择JAR file--->next-->选择jar file的路径及名称-->next-->next--- 选择Main class--->finish.

二.工程有引用外部jar包时(J2SE)
第一种方案
当工程引用了其他的外部jar时,由于eclipse不支持同时导出外部jar包的功能,所以比较麻烦一点;具体步骤如下:
1.生成manifest file:
选中工程---->右键,Export...--->Java--->选择JAR file--->next-->选择jar file的路径及名称-->next-->next--- 选择Main class--->finish。此时来到了要选择Main class的窗口,但这里先不选择Main class,选择最上方的Generate the manifest file(生成清单文件), 勾上Save the manifest in the workspace(将清单保存在工作空间中),在Manifest file(清单文件):中输入file的名称,如/testProject/main,(其中testProject为工程名,main为manifest file的名称)点击finish。
   生成的jar文件一运行就会产生错误:couldn't find main class
2.回到工程,打开刚刚生成的main,在这里要输入如下信息:
Manifest-Version: 1.0
Main-Class: com.pacong.convert.auto.propertes.ConvertAutoProperties
Class-Path: jxl.jar
其中,Manifest-Version: 1.0为刚刚自动生成的manifest版本号;
Main-Class: com.pacong.convert.auto.propertes.ConvertAutoProperties为Main class所在类;
Class-Path: jxl.jar为外部jar包名称,这里是告诉导出的jar包,所要用到的外部的jar包的路径及名称。
上面都做完了就可以导出带外部jar包的jar包了
3.选中工程--->右键,Export--->Java--->JAR file--->选择jar file的路径及名称--->next--->next--->next,这时又来到了选择main class的窗口,但这里也不选择main class,选择Use existing manifest from workspace,在Manifest file:里选择刚刚生成的main,如:/testProject/main,点击finish,到此就大功告成啦;假设生成的jar包的名称为test.jar,那么Class-Path中引入的jxl.jar要和test.jar位于同一个目录下。
不要选main.mf和manifest文件,在后面的选择existing manifest文件,变写manifest时:
Manifest-Version: 1.0
Main-Class:com.test.GameFrame  ; class:后面一定要有且只有1个空格
Class-Path: nimrodlf-1.2.jar liquidlnf.jar        ;path 后面一定要有且只有1个空格
另外,一定要注意Main-Class,Class-Path等后面会有一个直接的空格,不然会提示格式错误
最后必须有换行,不能有空格. 这个也是要注意的. 否则依然提示没有mainclass
jar creation failed
detail:invalid header field
用export runnable jar file时,不需要 么Class-Path中引入的jxl.jar要和test.jar位于同一个目录下。比较简单。
4.注意点:
如果想在命令行中运行刚刚生成的jar,命令如下:
C:\Documents and Settings\Administrator\桌面>java -jar test.jar
如果在jar中有一些System.out.prinln语句,运行后想看看打印出的内容,可以用一下命令:
C:\Documents and Settings\Administrator\桌面>java -jar test.jar >log.txt
输出信息会被打印到log.txt中,当然log.txt自动生成,并位于和test.jar一个目录中。
这里也可以新建一个start.bat文件,创建后;右键---编辑,输入:java -jar test.jar >log.txt;以后直接双击start.bat即可运行test.jar啦。
E盘,则你需要导入得包也要放在这个目录里。
第二种方案
将第三方包直接拷贝到jdk得安装目录中的jre/lib/ext/中,这时候我们需要重启一下Eclipse,这样才能将刚才的那个包加载进自动生成的系统库中,这时候按照上面的做法打包出来的jar包

第三种方案.用Fat jar插件来打包有引用外部jar包的项目(J2SE)
  1 如果你在程序开发的时候用到了第三方提供的API或者其它附属资源,在你导出生成jar文件时你必须将第三方的文件一并导出,不然你的程序运行将达不到你想要的结果.
   你可以利用Fat jar插件生成jar,Fat jar 的下载地址:http://sourceforge.net/projects/fjep/ 下载的文件是net.sf.fjep.fatjar_0.0.31.zip,解压缩后你会看到plugins文件夹中的net.sf.fjep.fatjar_0.0.31.jar文件(简称Fat jar).
插件安装:把Fat jar文件拷贝到你的eclipse目录下的plugins中..重新启动你的eclipse平台,然后查看Window---preferences, 弹出的窗口中有Fat jar preferences这一项则说明你已经安装成功了,没有这一项则未安装成功,需要多做如下几步操作:到你的eclipse目录下的 configuration---org.eclipse.update,并删除platform.xml文件,然后重新启动eclipse.查看 Window---preferences,你会发现Fat jar preferences这一项.恭喜你安装成功了2.右击你的项目,选项列表中有Build Fat jar这一项,选择它,点击Browser(Main-Class选择你的主类)---next--- finish(勾选你需要一起打包的资源,默认为全部勾选).瞧,jar文件就生成在你的工程项目中了.运行它,一切顺利.
2.用Fat jar打包:右击你的项目,选项列表中有Build Fat jar这一项,选择它,弹出的窗口你会觉得特别亲切,一目了然使用很方便,点击Browser(Main-Class选择你的主类)---next--- finish(勾选你需要一起打包的资源,默认为全部勾选).瞧,jar文件就生成在你的工程项目中了.运行它,一切顺利.
   我的eclipse,把插件复制到plugin下,删除了Platform.xml文件,且启动用eclipse.exe -clean 还是不行,插件安装不了,不知道怎么回事。




通过eclipse的Export 导出项,导出jar包时,有几点需要注意的事项。

假如我们导出的jar包名称为 demo.jar,右键解压demo.jar,META-INF 目录下面有 MANIFEST.MF文件,打开看到
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Manifest-Version: 1.0  
  2. Main-Class: com.zhangqi.you.main.JdbcTest  

1  Main-Class事项:
    main-class,顾名思义,主函数类,即demo.jar 默认运行时,执行的主方法类。
    在eclipse 导出jar的过程中,可以指定main-class属性,也可以不指定main-class,根据实际情况而定。

    如果导出的jar包中就只包含了一个main方法,其他的class类都是为这个类服务的,参与计算的,或引用的,那么就可以在导出时,直接指定main-class。
    如果导出的jar包中包含多个main方法,在运行时,需要根据情况而定执行哪一个主函数类,那么导出的过程中就不要指定main-class属性。在运行的时候,指定需要指定的main方法类即可。
  例如 java -jar demo.jar com.test.Demo1  运行 Demo1 类
          java -jar demo.jar com.test.Demo2  运行 Demo2 类

2  Class-Path事项:
     class-path,顾名思义,classpath,引用类路径。
     如果导出的jar包中引用了外部的jar包,那么直接运行java -jar demo.jar时,会报classnotfound异常的,这时候,需要为导出jar指定classpath
     打开MANIFEST.MF文件,在下面添加上 Class-Path: mysql-connector-java-5.0.8-bin.jar 便为demo.jar添加了mysql-connector-java-5.0.8-bin.jar的引用
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. Manifest-Version: 1.0  
  2. Main-Class: com.zhangqi.you.main.JdbcTest  
  3. Class-Path: mysql-connector-java-5.0.8-bin.jar  


     同时将mysql-connector-java-5.0.8-bin.jar  驱动jar包放到跟demo.jar同目录下即可引用到。
     如果有多个jar包引用的话,每个jar包间空格隔开即可。

No comments:

Post a Comment