jar包与java包_java打jar包和运行jar包的两种方式

一、java类不依赖第三方jar包

以简单的一个java类Hello为例:

最终生成的jar包结构

META-INF

MENIFEST.MF

Hello.class

方法步骤

(1)用记事本写一个Hello.java的文件

class Hello{

public static void main(String[] agrs){

System.out.println("hello");

}

}

(2)用命令行进入到该目录下,编译这个文件

javac Hello.java

(3)将编译后的Hello.class文件打成jar包

jar -cvf hello.jar Hello.class

c表示要创建一个新的jar包,v表示创建的过程中在控制台输出创建过程的一些信息,f表示给生成的jar包命名

(4)运行jar包

java -jar hello.jar 这时会报错误:hello.jar中没有主清单属性

添加Main-Class属性

用压缩软件打开hello.jar,会发现里面多了一个META-INF文件夹,里面有一个MENIFEST.MF的文件,用记事本打开

Manifest-Version: 1.0

Created-By: 1.8.0_121 (Oracle Corporation)

在第三行的位置写入 Main-Class: Hello (注意冒号后面有一个空格,整个文件最后有一行空行),保存

再次运行 java -jar hello.jar ,此时成功在控制台看到 hello ,成功。

二、java类依赖第三方jar包

假设类Hello依赖jar包Tom.jar,最终生成的jar包结构还是:

META-INF

MENIFEST.MF

Hello.class

解释: Hello类与Tom.jar的调用关系如下:

class Hello{

public static void main(String[] agrs){

Tom.speak();

}

}

class Tom{

public static void speak(){

System.out.println("hello");

}

}

但是Tom类已经打成了jar包Tom.jar

方法步骤:

(1)编写一个Hello.java并将其编译成Hello.class,注意,由于Hello里面引用了Tom类的speak方法,因此在打jar包时应使用-cp参数,将tom.jar包引入

javac -cp tom.jar Hello.class

这里的 -cp 表示 -classpath,指的是把tom.jar加入classpath路径下

(2)将hello.class达成jar包

jar -cvf hello.jar Hello.class

(3)引入jar包需要在MENIFEST.MF文件中配置一个新属性:Class-Path,路径指向你需要的所有jar包

现在MENIFEST.MF这个文件应该变成:

Manifest-Version: 1.0

Created-By: 1.8.0_121 (Oracle Corporation)

Main-Class: Hello

Class-Path: Tom.jar

(4)使用java -cp Tom.jar;hello.jar hello来运行jar包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值