Java 命令报错:找不到或无法加载主类

我使用的 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包运行

猜你喜欢

转载自blog.csdn.net/jiaobuchong/article/details/89052616