0. 前传
这两天在查找资料时出现了classpath这个名词,由于有些对其概念的模糊,所以进行了系统的了解和记录。
1. Classpath
1.1 介绍
Java中的classpath是JVM会用到的环境变量,它指示虚拟机去哪寻找class(此处可以拓展到到Java的类加载机制,后续会介绍)。Java作为编译型语言,在运行时会将.java文件编译成.class二进制字节码文件进行执行。
classpath是一组目录的集合,它设置的搜索路径与操作系统相关。当JVM在某个路径下找到了对应的class文件,就不再往后继续搜索。如果所有路径下都没有找到,就报错。
1.2 设定方法
- 在系统环境变量中设置
classpath环境变量,不推荐。这种方法会污染系统环境,例如当你在其他的路径下编写了同名的类,但是你在整个系统环境配置的classpath还是原来的路径,所以最终加载的class并不是新编写的而是原来的class。 - 在启动JVM时设置
classpath变量,推荐。在运行Java文件的时候,使用命令-classpath或-cp。当没有设置此参数时候,这个参数默认是.,即当前目录。 当在IDE中运行Java程序,IDE自动传入的-cp参数是当前工程的bin目录和引入的jar包。 另外不要把任何Java核心库添加到classpath中!JVM根本不依赖classpath加载核心库!
2. jar包
2.1 介绍
jar包实际上就是一个zip格式的压缩文件,而jar包相当于目录。如果我们要执行一个jar包的class,就可以把jar包放到classpath中:
java -cp ./hello.jar abc.xyz.Hello
这样JVM会自动在hello.jar文件里去搜索某个类。
将同一个主题或工具类封到一个jar包中,很好的组织了文件,方便管理,也有利于使用者重复使用。
2.2 如何创建jar包
既然是一个压缩文件,其实只需要用我们电脑上的压缩工具压缩为.zip,再将后缀改为.jar即可。
另外,大型项目中,jar包可以包jar包,只需要通过MANIFEST.MF文件去配置classpath即可。而且,当jar包变多手动难以管理的时候,还有Maven可以帮助我们很好的承担这项工作。
3. 后记
简单参考廖雪峰老师的网站了解了一下这两个知识,希望后续在使用见到的时候了解其配置和使用。