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参数的传入值,也就是实际的环境变量,不同目录间用分号“;”隔开
如果没有设置系统环境变量,也没有传入-cp与classpath参数,那么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包。

浙公网安备 33010602011771号