欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-23 08:38:46
...

我使用的 Java 版本是:

java version "1.8.0_191"

代码目录结构:Java 命令报错:找不到或无法加载主类
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 命令编译:
Java 命令报错:找不到或无法加载主类
这里指定了 classpath,不然编译器没法找到 StringUtils 类。
在 test 目录下:
Java 命令报错:找不到或无法加载主类
这什么鬼,居然报找不到或无法加载主类。我多方查询资料也无果,依赖的 jar 包目录指定了:~/test/jar/commons-lang3-3.4.jar,编译后的 class 文件目录也指定了:~/test

经过一轮测试,原来是目录指定的有问题:
Java 命令报错:找不到或无法加载主类
当我将 ~/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 命令报错:找不到或无法加载主类
上面这个命令要正常运行的话,需要保证 java 命令的执行是在所编译的类的目录中。

默认的 classpath 是当前目录,当自定义 classpath 的时候就会把默认的给覆盖掉,要在 classpath 中加入当前目录,直接用 . 就行。

参考:Setting the Class Path
classpath的理解及其使用方式
关于JAVA项目中CLASSPATH路径详解
JAVA和JAVAC 命令行;java 带有包名编译并运行,附带外部依赖jar包运行