Eclipse项目打包成jar

摘自 http://blog.csdn.net/summerxzg/article/details/6722682java

关于Eclipse将Java APP项目打包成jar的问题数据库

如何将写完的Java代码打包?因为他的源代码中使用了很多第三方的lib,所以有必要将lib也一并打包进去。他用Eclipse的Export功能直接打包到. jar 文件,第三方lib是打包进来了,但是使用的时候仍是提示找不到相应的包。

其实,为了本身的便利将别人发布的lib打包进本身project的包中不是一种合适的作法。这样作以前务必要检查一下对方的license,但无论是否是将对方的lib包括进来,既然本身的代码用到了,为了让它们正常工做,指明哪些包在那是必不可少的。师弟其实须要一个MANIFEST.MF文件,利用Eclipse生成jar文件的时候,请不要让其自动生成MANIFEST.MF,而是应当由你本身写好一个MANIFEST.MF,而后告诉 Eclipse:请使用这个文件。想了解细节,请阅读SUN的这篇规范(VIA),或者是IBM网站上的这篇JAR文件揭秘,偶这里就很少写了。windows

另外,Eclipse其实还有一个输出到可执行jar的功能,该功能可以帮你编写合适的MANIFEST.MF文件,帮你将你引用的第三方lib一并打包(注意license哦)。app

第一:普通类导出jar包,我说的普通类就是指此类包含main方法,而且没有用到别的jar包。 

1.在eclipse中选择你要导出的类或者package,右击,选择Export子选项; 

2.在弹出的对话框中,选择java文件---选择JAR file,单击next; 

3.在JAR file后面的文本框中选择你要生成的jar包的位置以及名字,注意在Export generated class files and resources和Export java source files and resources前面打上勾,单击next; 

4.单击两次next按钮,到达JAR Manifest Specification。注意在最底下的Main class后面的文本框中选择你的jar包的入口类。单击Finish,完成。 

你能够在dos环境下,进入你的jar所在的目录,运行 java -jar 名字.jar,检测运行是否正确。 

第2、你所要导出的类里边用到了别的jar包。好比说你写的类链接了数据库,用到数据库驱动包oracl.jar.。 

1.先把你要导出的类按照上面的步骤导出造成jar包,好比叫test.jar 

2.新建一个文件夹main,好比在D盘根目录下; 

3.把test.jar和oracl.jar拷贝到main文件下,右击test.jar,解压到当前文件夹。把META-INF\MANIFEST.MF剪切到另一个地方 (好比是桌面!) ; 

4.右击oracl.jar,解压到当前文件夹。 

5.在dos环境下,进入到D盘的main文件夹下,执行 jar cvfm new.jar meta-inf/manifest.mf .,不要忘了最后面的点。 

6.用压缩工具打开你新生成的new.jar,用你放在桌面的META-INF\MANIFEST.MF覆盖new.jar原有。 

你能够在dos环境下,进入你的jar所在的目录,运行 java -jar 名字.jar,检测运行是否正确。eclipse

关于 MANIFEST.MF 写法.

例如咱们打包的jar为 Test.jar 

Manifest-Version: 1.0 
Main-Class: windows.VideoWindow 
Class-Path: lib\org.eclipse.swt_3.3.0.v3346.jar lib\org.eclipse.swt.win32.win32.x86_3.3.0.v3346.jar 


上面为打包为jar中的包说明文件. 下面这个报错一直出现. 
could not find main class. Program will exit 
这个错误提示其实不是没有发现main class. 而是jar若是有错误执行不了,就会出现这个错误. 打包完成后, 要先运行 cmd -> java -jar your.jar 确认没有问题便可执行jar. 使用-jar参数后, 系统的Classpath 变量再也不起做用. 虚拟机将去MANIFEST.MF中的Class-Path 下找相关的包. 
而后才能成功的从: windows.VideoWindow 的main方法进入. 不然没有相关链接包,则会提示找不到main class. 而你们可能还迷糊的找不到北. 明明有main class吗. 


若是这个写的不对. 则就会一直报错. 
看看上面这个Class-Path: 后面的写法. 空格分开. 绝对不能有分号.切记. 

最后必须有换行. 这个也是要注意的. 不然依然提示没有mainclass. 

不要由于这个小事情耽误了时间. 其中 lib/ 表示这个jar必须在打包Test.jar所在目录的一个lib子目录中. 

运行jar须要命令: java -jar Test.jar 
双击也能够, 则使用 javaw 打开. 

关于java -classpath a.jar;b.jar; class test.Test 执行时. a.jar;b.jar; 后面都必须有分号. 不然报错. 不要期望不写classpath让系统本身找. 这不是在eclipse里面.必须写上你要使用的类. 不然总会提示您编译出错.ide