2021.4.30:classpath与jar

一、classpath

1、什么是classpath?

classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class

2、classpath的形式

classpath是一组目录的集合,它设置的搜索路径与操作系统相关。例如,在Windows系统上用分号;分隔,在Linux系统上,用冒号:分隔。

3、classpath的作用

当JVM查找某个类时,它会依次查找:

  • 当前工作目录
  • classpath下
  • java.util下

4、classpath设定方法

  • 在系统环境变量中设置classpath
  • 启动JVM时设置classpath

不推荐在系统环境变量中设置classpath,因为那样会污染整个系统环境,在启动JVM设置classpath才是推荐的做法。实际上就是给java命令传入参数-classpath或者-cp

java -classpath .; C:\work;C:\Java  Main

//

java -cp .;C:\work;C:\Java Main

上段代码标红的部分就是-classpath-cp参数的传入值,也就是实际的环境变量,不同目录间用分号隔开

 

如果没有设置系统环境变量,也没有传入-cpclasspath参数,那么JVM默认classpath.,即当前目录

在IDE中运行Java程序,则IDE自动传入的-cp参数是当前工程bin目录和引入的jar

不需要把任何Java核心库String、ArrayList)添加到classpath中,JVM不依赖classpath加载核心库

更好的做法是,不要设置classpath默认的当前目录.对于大多数情况来说够用了。

二、jar包

1、作用

如果有很多.class文件,散落在各层目录中,肯定不便管理,如果能把目录打成一个包,变成一个文件,就方便很多了。

jar包就是用来做这个的,它可以把package组织的目录层级,以及各个目录下的所有文件都打包成一个jar文件,这样一来,无论是备份还是发送给客户,就简单很多了。

2、实现

jar包实际上就是一个zip格式的压缩文件,而jar相当于目录如果我要执行一个jar包中的class,就可以把jar包放到classpath中:

java -cp ./hello.jar Main

这样JVM就会自动去hello.jar中去搜索某个类。

那么如何创建jar包呢?由于jar包就是zip包,所以可以直接将正确的目录保存为zip格式,并修改后缀为.jar,这样就成功创建了一个jar包。

需要说明的是,jar包下第一层目录,不能是bin,而应该是bin下的各种class所在的目录。

jar包中还可以包含一个特殊的/META-INF/MANIFEST.MF文件,这个文件是纯文本文件,可以指定Main-Class和其它信息。JVM会自动读取这个MAINFEST.MF文件,如果存在Main-Class,我们就不用在命令行指定启动的类名,而是用更方便的命令:

java -jar hello.jar

 jar包中还可以包含其它jar包,这个时候就需要在MANIFEST.MF文件中配置classpath了。

在大型项目中,不可能手动编写MANIFEST.MF文件,再手动创建zip包。Java社区提供了大量的开源构建工具,例如Maven,可以很方便地创建jar包。

posted @ 2021-04-30 21:31  ShineLe  阅读(74)  评论(0)    收藏  举报