如何打包程序为 JAR 文件(转)
其实 JAR 文件的格式是 ZIP 格式的, 因此它可以用各种能够处理 ZIP 文件的工具来进行操作, 例如 WinZip, WinRAR, PKZIP 等, 还有 JDK 自带的 JAR 工具. 因此我们将就使用这两种类型的工具来制作 JAR 文件进行讨论.
首先需要声明的是, 并不是所有类型的 Java 应用程序都能打包到单独的一个 JAR 文件中去. 必须符合一定的条件, 一个 Java 应用程序的所有文件才能打包到一个文件中去. 另外, JAR 文件有两种, 一种是有清单(manifest)文件的, 一种是没有清单文件的(这种主要用来存放 Java 库文件). 清单文件有许多作用, 我这里只讨论那种可以使用 Java 来运行 JAR 文件的清单文件. 就是使用命令
java -jar MyJarFile.jar
可以直接运行的 JAR 文件. 这种 JAR 文件的清单文件的内容如下所示:
Manifest-Version: 1.0
Main-Class: MainClassFile
Created-By: Your Company
. 例如, 假定你的程序里面的主程序是 com.abc.MainFrame, 那么你的这个清单文件的内容是:
Manifest-Version: 1.0
Main-Class: com.abc.MainFrame
Created-By: Abc Company
. 然后我想讨论一下打包到单独 JAR 文件的应用程序的编写需要注意的问题.
程序的资源文件(如*.gif, *.jpg, *.jpeg, *.properties 等等)不能使用物理路径, 只能使用相对于当前类文件的相对资源路径, 只有这样才能保证打包以后程序才能找到这些资源文件. 那么, 这些文件在打开的时候都要使用下列语句:
URL url = getClass().getResource(String name);
或者
InputStream in = getClass().getResourceAsStream(String name);
. 例如:
javax.swing.ImageIcon icon = new javax.swing.ImageIcon("1.gif");
那么打包后的程序将不能找到这个图片, 因为它引用了一个物理路径的图片, 它应该改成这样:
javax.swing.ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource("1.gif"));
. 其它的资源文件的使用也与此相似. 不过属性文件(*.properties)的使用, Java 自动会加载 JAR 文件中的属性文件, 例如:
ResourceBundle.getBundle("com.abc.test");
那么, 这个文件只要放在 JAR 文件目录结构下的 com/abc/test.properties, Java 就能自动找到这个文件.
接着我想讨论一下使用 JAR 工具如何来创建 JAR 文件, 这个工具可以在 <JDK_install_HOME>/bin 下找到, 文件名在 Win32 版下为 jar.exe, Unix 下为 jar. 在命令行窗口下输入 jar 命令, 将看到下列输出:
用法:jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
选项:
-c 创建新的归档
-t 列出归档内容的列表
-x 展开归档中的命名的(或所有的〕文件
-u 更新已存在的归档
-v 生成详细输出到标准输出上
-f 指定归档文件名
-m 包含来自指定的清单(manifest〕文件的清单(manifest〕信息
-0 只存储方式;未用ZIP压缩格式
-M 不产生所有项的清单(manifest〕文件
-i 为指定的jar文件产生索引信息
-C 改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和归档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺
示例1:将两个class文件归档到一个名为 'classes.jar' 的归档文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest〕文件 'mymanifest' 将 foo/ 目录下的所有
文件归档到一个名为 'classes.jar' 的归档文件中:
jar cvfm classes.jar mymanifest -C foo/ .
假设你想将上面的 com.abc.MainFrame 为主程序的一个应用程序打包为一个单独的 JAR 文件, 那么首先在程序的根目录下建立内容如前所述的清单文件, 文件名为 MANIFEST.MF, 然后在命令行窗口下, 转变当前目录为程序根目录, 输入下列命令:
jar cvfm abcApp.jar MANIFEST.MF *.*
, 那么, 会使用现有的清单文件创建一个名为 abcApp.jar 的文件, 并将目录下的所有文件(包括子目录)加入此 JAR 文件中.
而如果希望使用非 JAR 工具建立 JAR 文件, 建议使用 WinRAR. 首先还是需要建立一个清单文件(名字必须为MANIFEST.MF), 向此文件中写入同使用 JAR 工具时一样的内容, 接着需要建立一个META-INF子目录, 然后将 MANIFEST.MF 放入此目录, 接着就可以保持目录结构将所有这些内容使用 WinRAR 压缩为 ZIP 格式的文件, 文件名取为 abcApp.jar 即可. 如下所示, 目录结构为:
+
|
+-----/META-INF/MANIFEST.MF
|
+----com/abc/MainFrame.class
. 选中程序根目录下的各个子目录及根目录下的文件, 点击鼠标右键, 选择"添加到压缩包..."命令, 然后指定文件名为 abcApp.jar, 格式为 ZIP, 最后点击"确定"即可完成.
由于作者的表达力和能力所限, 因此这篇讨论的内容有一些不尽如人意的地方. 因此您可以参考 Sun Microsystems 的 Java 教程里面的 JAR 部分作为补充(英文版), 地址: http://java.sun.com/docs/books/tutorial/jar/.
分享到:
相关推荐
NULL 博文链接:https://jarg.iteye.com/blog/852885
将Java开发程序打包成jar文件或exe文件所需的工具
将springboot打包成的jar文件做成windows服务,解决java程序自启动问题,适合现场部署后无人看管情况,断电后服务器启动后不用管理springboot服务,不用打开cmd,也不担心现场人员误操作关闭cmd窗口。
将一个java程序或项目打包成jar与exe文件 将一个java程序或项目打包成jar与exe文件 将一个java程序或项目打包成jar与exe文件
Eclipse打包带mysql的java程序
发布JAVA应用程序(将CLASS文件打包成.jar文件) 将一个CLASS文件打包成一个.jar文件分为以下几个步骤方法
Java程序的参数传递及项目打包成JAR文件(以内部类为例)
通常Java程序只打包成,jar文件,执行时需要jre的支持,如果程序本身很小,对于并非电脑专业的人来说,要能使用Java桌面程序,前面的安装工作是个不小的负担。查找了一些资料,总结了一下,发布一个最小版的Java程序...
通过jar生成可执行的jar文件 将您要打包成jar的class文件放到D盘的temp目录下(也可以自定义) 在cmd命令行中键入如下指令: 1. 进入temp目录:cd tmep 2. 输入打包jar命令:jar -...选中您要导出为jar文件的项目右
分享自己做的的打包工具,希望能帮助到平时为一堆补丁文件class(自动包含class内部类),jsp,html,js,css,xml,jar等文件花费很长时间整理的朋友,有了我这个工具,似乎这一切都变得简单,你只需要选择路径,然后在...
将eclipse或者idea打包后的.jar包小工具类文件再打包成exe可执行文件。
在编写完自己的程序以后,可以利用此方式提供给其他应用程序,安全
1、exe4j打包工具主要把jar包打成exe文件; 2、nsis打包工具; 3、打包示例程序。
用Eclipse也可以将Java程序打包成jar文件,只需双击即可运行···
java桌面应用程序如何打包成jar文件和可执行的exe文件的详细步骤和过程介绍,以及解决其中的问题方法。
初学者们经常纳闷,千辛万苦写出的一个个程序,却只是一堆散乱的class文件,于是,将它们打包成为可使用的jar文件成了拦路虎。自制资源,与大家分享。
2015年2月26日所下载代码打包的原版jar文件
好在Java提供了一系列打包和发布工具,可以显著的简化发布过程该文章提供了打包Java code的几种方法,我们将会探讨Java manifest 文件,给出用于管理JAR文件所依赖文件、估计跨平台发布所需的CLasspath的合适方法....
5、在这里填写Main class的名字,单击绿色+选择所需的.jar文件,如果没有特殊要求我们就可以再继续了。 6、接下来是选择jre版本,填写好jre的最大最小版本然后再继续。 7、下面设一下你的文件执行的片头,增加其...
Launch4j是一个开源的安装程序,将您的jar文件打包成操作系统的本地可执行文件,支持Windows, MacOS,Linux和Solaris。对于JRE,您可以嵌入在安装文件中,也可以在安装时提示用户下载正确的JRE版本。Launch4j更加吸引...