关于 Java classpath 的一切
程序员文章站
2022-06-04 14:49:24
...
classpath 是 JVM 和 Java 编译器的一个参数,用于指定你的类和包的位置。设置 classpath 有两个途径:
- 命令行
- 环境变量
1. 虚拟机查找和载入类的顺序
就像动态载入一样,当执行 Java 程序时,JVM 查找和载入类文件时是惰性的——类的字节码文件在第一次被使用时才会被载入。虚拟机查找和载入类的顺序如下:
- bootstrap classes 引导类:Java 平台的基础类,JDK 标准 API
- extension classes 扩展类:位于 JRE 或 JDK 的扩展目录
jre/lib/ext/
- user-defined packages and libraries:用户定义的包和库
默认地,前两种类的访问是自动行为,不需要指定路径。
2. 设置路径
假设我们有一个包 org.mypackage
,其中含有下面三个类文件:
- HelloWorld.class(含有 main 方法)
- Support.class(支持类)
- Utils.class(工具类)
这个包位于 D:\mprogram
(Windows)或 ~/myprogram
(Linux)下,目录结构如下:
D:\mprogram\myprogram/ └── org └── mypackage ├── HelloWorld.class ├── Support.class └── Utils.class
~/myprogram/ └── org └── mypackage ├── HelloWorld.class ├── Support.class └── Utils.class
运行程序:
Windows
java -classpath D:\myprogram org.mypackage.HelloWorld
Linux
java -cp ~/myprogram/ org.mypackage.HelloWorld