https://docs.oracle.com/javase/tutorial/essential/environment/paths.html
以下内容基于java8, 一些地方与后面的版本不一致。
本文介绍PATH和CLASSPATH环境变量。
jdk安装目录中,bin文件夹下包含compiler和launcher。
PATH略过。
CLASSPATH用来告诉应用和JDK工具,用户的class在什么地方。
使用-cp可以单独设置CLASSPATH
CLASSPATH默认值为"."
CLASSPATH可以指定多个,使用:分割
CLASSPATH只能是目录,归档(.zip or JAR file)或者*通配符
Java Launcher如何查找类
Java launcher java 启动JVM。JVM搜索和加载类的顺序如下:
- Bootstrap classes: 构成Java平台的类,包括rt.jar以及其他几个jar的类
- Extension classes:使用Java Extension机制的类,在jre/lib/ext文件夹下的.jar文件中,该机制从java9开始被废弃。
- User classes: 用户和第三方定义的类。通过CLASSPATH找到
Bootstrap classes指实现了Java 2 Platform的类。
bootstrap class path存在sun.boot.class.path的system property里面。-Xbootclasspath可以指定新的bootstrap class path。
实现了Java 2 SDK tools的类不属于Bootstrap classes。tool class被放在/lib/tools.jar中。开发工具在调用launcher的时候会把tool class的路径添加到user class path。
Extension classes通过Java Extension Framework加载。
java launcher会把user class path string放进java.class.path这个system property中。
一个JAR文件通常包含“manifest”,这个文件罗列了这个JAR包含的内容。mainifest可以定义JAR-class-path