[标题]:[原]手动打包JAR为可执行文件
[时间]:2012-02-13
[摘要]:打包JAR的步骤、JAR包内部的资源访问以及MANIFEST.MF文件格式注意事项。
[关键字]: Java、package、打包、Jar、manifest、可执行文件
[文章编号]:暂无
[环境]: JDK 7.0
[作者]: wintys (wintys@gmail.com)
[正文]:
0、背景
尽管IDE自动打包JAR的功能已经很强大,但是手动打包JAR的步骤和注意事项也得心知肚明。对于简单的示例程序,使用手动打包也很方便。
1、打包JAR
1.1 建立清单文件
以下内容为文件内容
清单文件MANIFEST.MF(在D:\test\class目录下):
==================
Manifest-Version: 1.0
Main-Class: a(主类的路径,此选项可选,如果希望在windows下双击就执行,必须写)
Created-By: 1.7.0_02 (Oracle Corporation)(随便写,这个是创建人名字)
==================
1.2 打包
在D:\test\class\目录下执行
jar cvfm classes.jar MANIFEST.MF *.*
以上命令将class下所有文件打包到classes.jar,生成在class目录下。
1.3 执行
输入java -jar classes.jar执行 或 双击classes.jar即可。
1.4 另一种方案
如果希望使用非JAR工具建立JAR文件, 建议使用WinRAR。首先还是需要建立一个清单文件(名字必须为MANIFEST.MF), 向此文件中写入同使用JAR 工具时一样的内容, 接着需要建立一个META-INF子目录, 然后将 MANIFEST.MF放入此目录, 接着就可以保持目录结构将所有这些内容使用 WinRAR 压缩为 ZIP 格式的文件,文件名取为 xxx.jar 即可。
2、需要注意的相关问题
2.1 JAR中的资源访问
程序的资源文件(如*.gif, *.jpg, *.jpeg, *.properties 等等)不能使用物理路径, 只能使用相对于当前类文件的相对资源路径, 只有这样才能保证打包以后程序才能找到这些资源文件. 那么, 这些文件在打开的时候都要使用下列语句:
URL url = getClass().getResource(String name);
或者
InputStream in = getClass().getResourceAsStream(String name);
例如:
URL url = getClass().getResource("loading.gif");
ImageIcon icon = new ImageIcon(url);
其它的资源文件的使用也与此相似. 不过属性文件(*.properties)的使用, Java 自动会加载 JAR 文件中的属性文件, 例如:
ResourceBundle.getBundle("com.abc.test");
那么, 这个文件只要放在 JAR 文件目录结构下的 com/abc/test.properties, Java 就能自动找到这个文件.
2.2 清单文件的格式
MANIFEST.MF内容示例(添加JAR库文件,在Class-Path指明路径):
Manifest-Version: 1.0
Class-Path: lib/commons-codec-1.4.jar lib/commons-logging-1.1.1.jar li
b/httpclient-4.1.3.jar lib/httpclient-cache-4.1.3.jar lib/httpcore-4.
1.4.jar lib/httpmime-4.1.3.jar
Created-By: 1.7.0_02 (Oracle Corporation)
Main-Class: MyLogin
a.清单文件文件条目的冒号后有一个空格。
b.清单文件总是以Manifest-Version属性开头
c.每行最长72个字符,如果超过,采用续行。(手动写MANIFEST.MF时不受此限,用JAR.exe生成JAR包时会自动断行。)
d.确认每行都以回车结束,否则改行将会被忽略。
e.如果Class-Path 中的存在路径,使用"/"分隔目录,与平台无关。
f.Class-Path中的jar包之间用空格分隔,而非分号。
g.如果库不打包入JAR,写成:Class-Path: ./lib/jacob.jar ./lib/jdom.jar ./lib/log4j.jar
[参考资料]:
[1]*《命令行用JAR打包CALSS文件,很简单》: http://www.diybl.com/course/3_program/java/javajs/20090407/164482.html
[2] 《打包程序为 JAR 可执行文件》 : http://www.moon-soft.com/doc/25438.htm
[3] 《打jar把第三方的jar也打进去》 : http://www.blogjava.net/soddabao/archive/2007/01/08/92455.html
[4] 《Jar命令 Manifest.mf的用法》 : http://ganqing.iteye.com/blog/1138341
[5] 《关于 jar包中MANIFEST.MF 写法 》 : http://blog.csdn.net/happyhell/article/details/6639792
[6]*《JAR File Specification》(Oracle) : http://docs.oracle.com/javase/1.3/docs/guide/jar/jar.html#The%20META-INF%20directory
原创作品,转载请务必保持原文完整性并注明出处。
作者:wintys (wintys@gmail.com)
博客:http://www.blogjava.net/wintys
posted on 2012-02-13 20:35
天堂露珠 阅读(1274)
评论(0) 编辑 收藏 所属分类:
Java