jar命令打包Java程序

我们经常会见到jar文件,有些可以直接运行,例如windows下双击jar文件、Linux下使用 " java -jar *.jar "命令, 均能运行jar文件,
而有些jar文件却不能双击运行或者使用上述命令运行时提示没有Main。其中的原因和jar文件生成办法有关,只有生成jar文件时指定了Main方法所在类的才能直接运行。
下面介绍常用的两种生成jar文件方法:


(1) 生成jar时指定入口类


例如有如下程序:
[root@localhost javaTest]# ls   <Test.java是包含main方法的入口类>
Test.java  Test.class   
首先,创建一个manifest.mf文件,并添加相关内容,指定入口类.
[root@localhost javaTest]# vim manifest.mf 
Main-Class:<空格>Test<回车>
一定要注意:空格和回车:  Main-Class: Test
打包:
[root@localhost javaTest]# jar cvfm x.jar manifest.mf *.class
打包时需要将class文件打包,当然也可以选择其它文件.
运行:
[root@localhost javaTest]# java -jar javaTest.jar
因为指定了入口类,所以这样运行时会直接运行jar文件中的Test类.
查看jar文件中的内容:
使用 " jar xvf *.jar " 解压jar文件到当前目录下
zkl@hadoopvm01:~/java/Hello> jar xvf x.jar 
  created: META-INF/
 inflated: META-INF/MANIFEST.MF
 inflated: Test.class
zkl@hadoopvm01:~/java/Hello> ls
Test.class  x.jar  META-INF
zkl@hadoopvm01:~/java/Hello> ls META-INF/
MANIFEST.MF
zkl@hadoopvm01:~/java/Hello> cat META-INF/MANIFEST.MF   
Manifest-Version: 1.0
Created-By: 1.6.0_17 (Sun Microsystems Inc.)
Main-Class: Test
我们可以看到有个META-INF/MANIFEST.MF文件,manifest.mf文件的内容在打包时会写入到该文件当中。
运行jar文件时,也会读取该文件,找到入口类.


(2) 生成jar时不指定入口类
同样是上面的程序, 首先打包:
[root@localhost javaTest]# jar cvf x.jar *.class
运行:
   由于没有指定入口类, "java -jar x.jar" 命令会出现如下错误:
   Failed to load Main-Class manifest attribute from x.jar。
   我们解压 x.jar 文件,查看MANIFEST.MF内容
zkl@hadoopvm01:~/java/Hello> cat META-INF/MANIFEST.MF   
Manifest-Version: 1.0
Created-By: 1.6.0_17 (Sun Microsystems Inc.)


发现于(1)比,少了一行,这就是原因所在。此时需要按如下方式运行jar文件。
zkl@hadoopvm01:~/java/A> java -classpath x.jar Test
这样运行时,java会在classpath中搜索Test类,这里会在x.jar中搜多到Test,然后运行。


附:


(3) jar 命令复杂打包


外部库路径: lib
源码路径: src, 有很多包
class文件所在路径: bin






























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值