Java中的jar包的打包及导入

Java中的jar包的打包及导入

1 jar包

jar包(Java ARchive )是一种基本zip 格式的文件格式。目标是将java 生成的类文件、资源文件、管理文件等按照特定的结构打包成一个独立的文件,方便程序的发布或网络的下载。

package com.glp;
public class Hello {
    public static void sayHello(String target) {
        System.out.println("Hello " + target);
    }
    public static void main(String[] args) {
        System.out.println("world");
    }
}

将上述代码编译成Hello.class 文件,然后在cmd下使用jar cvf Hello.jar com\glp\Hello.class压缩jar包。
在这里插入图片描述
jar包的目录结构:
在这里插入图片描述
MANIFEST.MF内容(简单描述了我们jar 包的版本和创建工具):

Manifest-Version: 1.0
Created-By: 9.0.1 (Oracle Corporation)
2 将jar 包转变为可执行程序入口

MANIFEST.MF 中我们只需要认识一个标签: Main-Class,这个标签的含义是给出我们打包好的jar 文件中,哪个类是我们程序的入口类。

新建一个Manifest.txt 文件,并写入以下内容

Main-Class: com.glp.Hello

注意: 一定要在最后跟一个空行

还是在jar包所在目录下运行:

jar cvfm Runnable.jar Manifest.txt com\glp\Hello.class

在这里插入图片描述
运行结束后,得到了一个可执行jar包Runnable.jar
在这里插入图片描述
MANIFEST.MF内容更新为:

Manifest-Version: 1.0
Main-Class: com.glp.Hello
Created-By: 9.0.1 (Oracle Corporation)

运行Runnable.jar包:java -jar Runnable.jar
在这里插入图片描述

3 使用jar包中的类

将Hello.jar包放在Main类所在目录中。

package Test;
import com.glp.Hello;
public class Main {
    public static void main(String[] args) {
        Hello.sayHello("world");
    }
}

尝试编译,报错:
在这里插入图片描述
这是因为我们的类放在jar 文件中,javac 编译器无法找到这个类文件,所以我们需要通过指定classpath 的方式,告诉编译器去哪里找到Main 类

如果没有包声明:

javac -classpath Hello.jar -encoding UTF-8 Main.java

因为Main.java中有包声明,所以需要打包编译或者跳到包目录的上级目录中进行编译:

javac -classpath Hello.jar -encoding UTF-8 -d . Main.java

参考博客:带有包声明的编译

运行时,报错:
在这里插入图片描述
这次是因为JVM找不到类,我们需要通过classpath 的配置方式,告诉JVM 我们的com.glp.Hello 类的位置。

如果没有包声明:

java -classpath "Hello.jar;." Main

因为有包声明:

java -classpath "Hello.jar;." Test.Main

在这里插入图片描述

导包编译时(有import com.glp.Hello时)执行流程是这样的:Main.java文件编译之后生成的字节码文件在当前目录(编译时他会寻找com.glp中是否有需要导入的Hello.class文件,若无,编译不通过,执行时,如果Main.java中没有包声明,java虚拟机首先会在当前目录找到Main.class就会执行. 如果有包声明,java虚拟机会去去包目录下寻找有没有Main.class字节码文件,如果找到了才能够成功执行。执行到程序中引用到Hello类的地方时,java虚拟机在当前目录查看是否有Hello.class字节码文件,即使发现了,也会根据源程序中的包导入进入包中寻找Hello.class,找到才能执行成功(其实在编译阶段就已经寻找了!).

参考博客:在Idea中进行jar包的打包及导入

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值