1. 作用
作用: 指定 java-解释器、javac-编译器 查找 .class或.java 文件的位置(可以是 目录、jar、zip) 多个目录时,用 : 分割
2. 区别
区别: -classpath 和 -cp 相同
是 javac、java 命令的参数
CLASSPATH 为环境变量
如果配置了 CLASSPATH,启动 javac、java是会默认使用 CLASSPATH
如果使用参数时 -classpath=path:CLASSPATH
示例: export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/usr/local/lib/antlr-4.0-complete.jar
3. 示例: 编译时 java源文件中 引用了其他的类
1. 在 /root/up 下 创建 One.java
// 引用了 外部类 Two
public class One {
public static void main(String[] args) {
new Two().show();
System.out.println("One启动了");
}
}
2. 在 /home/software 下 创建 Two.java
public class Two {
public void Two(){
System.out.println("Two启动了");
}
public void show(){
System.out.println("Two启动了");
}
public static void main(String[] args) {
System.out.println("Two启动了");
}
}
3. 编译 One.java
javac One.java
One.java:3: 错误: 找不到符号
new Two().show();
^
符号: 类 Two
位置: 类 One
1 个错误
分析: 无法找到 引用 Two的java文件在哪里
3.1 编译 One.java 指定 -cp
javac -cp /home/software One.java
3.2 编译 One.java 指定 环境变量 CLASSPATH
export CLASSPATH=.:/home/software
javac One.java
4.示例 运行 一个引用了外部类的类
1. 运行 java One
Exception in thread "main" java.lang.NoClassDefFoundError: Two
at One.main(One.java:3)
Caused by: java.lang.ClassNotFoundException: Two
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 1 more
分析: 无法找到 Two.class
2. 运行 java One 指定 -cp (指定 Two.class 所在的目录 和 One.class 所在的目录)
java -cp /home/software:./ One
3. 运行 java One 指定 环境变量 CLASSPATH
export CLASSPATH=.:/home/software
java One
Original: https://www.cnblogs.com/bajiaotai/p/16802040.html
Author: 学而不思则罔!
Title: 关于 CLASSPATH 和 -classpath 和 -cp
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685435/
转载文章受原作者版权保护。转载请注明原作者出处!