java打成jar包
下面是jar命令的帮助说明:
用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项包括:
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。
示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
示例 2:使用现有的清单文件 "mymanifest" 并
下文假设编译后的class文件在bin目录下
一、打包成一般的jar包(非可执行jar包)
eg1:进入指定目录并将该目录下的所有文件打包:
[zhu@bigdata-jobtrack bin] pwd
/home/zhu/workspace/hadoop/bin
jar cvf wordcount.jar . 或 jar cvf wordcount.jar ./ 或 jar cvf wordcount.jar ./*
以上三个命令都一样,"."表示将当前目录(/home/zhu/workspace/hadoop/bin)下的所有文件打成jar包,生成的wordcount.jar包在当前的操作目录(/home/zhu/workspace/hadoop/bin)
eg2.在任意目录打包非当前目录(即不是你所在的任意目录)下的文件:
[zhu@bigdata-jobtrackzhu] pwd
/home/zhu
jar cvf wordcount.jar -C /home/zhu/workspace/hadoop/bin .(或”./“或”./*“)
注意:
1.”.“表示将/home/zhu/workspace/hadoop/bin目录下的所有文件打包,注意”.“不能写错,如果写成了”../“则表示将bin目录的上级目录及/home/zhu/workspace/hadoop目录下的所有文件打包,如果这样子的话,最后生成的jar包的包路径就多了一个bin,如bin/org/zhu/hadoop/WordCount.class,正确的应是org/zhu/hadoop/WordCount.class。
2.上述操作生成的wordcount.jar文件在当前操作目录下(/home/zhu),而不是在/home/zhu/workspace/hadoop/bin下,也即是说你在什么路径下执行jar命令最后生成的jar包就在什么路径。
二、打包成可运行的jar包
要打包成可运行的jar包,有三种方法:
一是手动创建MANIFEST.MF文件,并在其中指定主类,然后执行jar cvfm xxxx.jar MANIFEST.MF(注意该文件的路径) (-C class路径 ). ;
二是使用jar的-e参数指定可运行jar包的入口点(即main类的完全名称),即命令jar cvfe xxx.jar 主类全名称 (-C bin/) .
三是先使用上文中"一、打包成一般的jar包(非可执行jar包)"中的方法打包成一般的jar包,然后用压缩工具打开META-INF/MANIFEST.MF文件,并修改其内容,加上Class-Path和Main-Class参数值。
eg:新建一个工程,结构如下,在Print.java程序中打印"hello word"
[zhu@zhu Test]$ cd ~/workspace/Test
pwd:
/home/zhu/workspace/Test
[zhu@zhu Test]$ ls :
bin src
1.方法一:手动建立MANIFEST.MF文件并执行jar cvfm命令打包:
(1).新建MANIFEST.MF文件并编辑:
[zhu@zhu Test]$ touch MANIFEST.MF
MANIFEST.MF内容如下:
- Manifest-Version:
1.0 - Created-By: zhuxun
- Class-Path:
. - Main-Class: hello.Print
注:主类名必须把包路径也加上(即填写完整的类路径)
说明:
(2).执行jar cvfm命令:
[zhu@zhu Test]$ jar cvfm hello.jar MANIFEST.MF -C bin/ .
这时会在当前目录(/home/zhu/workspace/Test)下生成hello.jar
解压hello.jar并查看META-INF/MANIFEST.MF文件,内容如下:
Manifest-Version: 1.0
Created-By: zhuxun
Class-Path: .
Main-Class: hello.Print
运行hello.jar:
[zhu@zhu Test]$java -jar hello.jar
hello world
2.方法二:使用jar的-e参数指定可运行jar包的入口点(即执行jar cvfe命令指定主类):
[zhu@zhu Test]$ jar cvfe hello.jar hello.Print -C bin/ .
注:主类名必须把包路径也加上(即填写完整的类路径)
说明:
这时会在当前目录(/home/zhu/workspace/Test)下生成hello.jar
解压hello.jar并查看META-INF/MANIFEST.MF文件,内容如下:
Manifest-Version: 1.0
Created-By: zhuxun
Main-Class: hello.Print
注:此种方式生成的MANIFEST.MF文件中没有Class-Path参数
[zhu@zhu Test]$ java -jar hello.jar
hello world
3. 方法三:先使用上文中"一、打包成一般的jar包(非可执行jar包)"中的方法打包成一般的jar包,然后用压缩工具打开META-INF/MANIFEST.MF文件,并修改其内容,加上Class-Path和Main-Class参数值,参考如下:Main-Class: hello.Print
另外可以使用Eclipse的Export功能完成打包:
一、打包成一般的jar包:
步骤如下:
二、打包成可运行的jar包
步骤如下: