Java 命令报错:找不到或无法加载主类
程序员文章站
2022-05-23 08:38:46
...
我使用的 Java 版本是:
java version "1.8.0_191"
代码目录结构:
ClassPathDemo.java:
package com.jiaobuchong;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
public class ClassPathDemo {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("jack");
System.out.println(set);
System.out.println(jarTest("one"));
}
private static String jarTest(String a) {
if (StringUtils.isBlank(a)) {
return null;
}
return a.toUpperCase();
}
}
使用 javac 命令编译:
这里指定了 classpath,不然编译器没法找到 StringUtils 类。
在 test 目录下:
这什么鬼,居然报找不到或无法加载主类
。我多方查询资料也无果,依赖的 jar 包目录指定了:~/test/jar/commons-lang3-3.4.jar
,编译后的 class 文件目录也指定了:~/test
。
经过一轮测试,原来是目录指定的有问题:
当我将 ~/test
换成绝对路径:/Users/jackchou/test
就正常了,原来 classpath 指定的目录中,第二个目录不能是使用 ~
,第一个目录可以。为了避免错误,classpath 都指定绝对路径 java -classpath /Users/jackchou/test/jar/commons-lang3-3.4.jar:/Users/jackchou/test com.jiaobuchong.ClassPathDemo
,可以在任何目录运行这个 Java 类。
上面这个命令要正常运行的话,需要保证 java 命令的执行是在所编译的类的目录中。
默认的 classpath 是当前目录,当自定义 classpath 的时候就会把默认的给覆盖掉,要在 classpath 中加入当前目录,直接用 .
就行。
参考:Setting the Class Path
classpath的理解及其使用方式
关于JAVA项目中CLASSPATH路径详解
JAVA和JAVAC 命令行;java 带有包名编译并运行,附带外部依赖jar包运行