java打成jar包


java打成jar包

  

下面是jar命令的帮助说明:

用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...

选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  解压缩已归档的指定(或所有)文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储;不使用任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。

示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
       jar cvf classes.jar Foo.class Bar.class
示例 2:使用现有的清单文件 "mymanifest" 并
           将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
       jar cvfm classes.jar mymanifest -C foo/ .

 

下文假设编译后的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内容如下:

  1. Manifest-Version: 1.0  
  2. Created-By: zhuxun
  3. Class-Path: .   
  4. Main-Class: hello.Print

注:主类名必须把包路径也加上(即填写完整的类路径)

说明:

  第一行指定清单的版本,若无,则JDK默认生成:Manifest-Version: 1.0

  第二行指明创建的作者,若无,则JDK默认生成Created-By: 1.6.0_22(Sun Microsystems Inc.)

  第三行指定主类所在类路径,

  第四行指明程序运行的主类

(2).执行jar cvfm命令:

[zhu@zhu Test]$ jar cvfm hello.jar MANIFEST.MF -C bin/ .

 说明:

  参数f:指定打包后的包名。

  参数m:指定自定义的MANIFEST.MF清单文件,否则,JDK会自动生成不包含Main-Class的默认清单。

  参数c:指定是创建新的归档文件。

  参数v:在标准输出中生成详细输出,该选项是可选的。

这时会在当前目录(/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参数值,参考如下:
Class-Path: .   
Main-Class: hello.Print
注:种方法有点太麻烦了,不推荐使用。

另外可以使用Eclipse的Export功能完成打包:

一、打包成一般的jar包:

步骤如下:

  1)在要打包的项目上右击,选择Export

  2)在弹出的窗口中,选择Java -> JAR File,然后点击next按钮

  3)在JAR File Specification窗口中,设置打包成的文件名和存放位置,点击两侧next

  4)在JAR Manifest Specification窗口中,设置MANIFEST.MF清单文件的配置,

    若仅仅打包成单纯的jar包的话,不用做任何修改,采取默认即可

    若打包成可执行jar包的话,可以使用已存在的MANIFEST文件或者直接选择Main class

  5)点击Finish按钮,完成打包。

二、打包成可运行的jar包

步骤如下:

  1)在要打包的项目上右击,选择Export

  2)在弹出的窗口中,选择Java -> Runnable JAR File,然后点击next按钮

  3)在Runnable JAR File Specification窗口中,选择Launch configuration和Export destination

  4)点击Finish按钮,打包完成。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值