【发布时间】:2017-07-08 02:38:21
【问题描述】:
我知道这是一个常见问题,但我已阅读所有其他答案,但找不到解决方案。我正在尝试理解 Java 类路径,但是当我尝试指定外部库时遇到了 Error: Could not find or load main class Hello。
我从这个简单的程序开始,它直接位于我的主目录中:
import java.util.*;
public class Hello {
public static void main(String[] args) {
Date date = new Date();
System.out.println("Hello world");
}
}
这编译并运行得很好......
[user ~]> ls -l
Hello.java
[user ~]> javac Hello.java
[user ~]> ls -l
Hello.java
Hello.class
[user ~]> java Hello
Hello world
...告诉我类路径环境变量设置正确(因为它找到了 java.util 包)。
然而,当我尝试导入一个随机的第 3 方包并在 -classpath中指定它的位置时,我得到了错误:
[user ~]> cat Hello.java
import java.util.*;
import org.apache.commons.lang3.time.*;
public class Hello {
public static void main(String[] args) {
StopWatch sw = new StopWatch();
Date date = new Date();
System.out.println("Hello world");
}
}
[user ~]> ls .m2/repository/org/apache/commons/commons-lang3/3.3.1
commons-lang3-3.3.1.jar
[user ~]> javac -classpath ~/.m2/repository/org/apache/commons/commons-lang3/3.3.1/commons-lang3-3.3.1.jar Hello.java
[user ~]> java -classpath ~/.m2/repository/org/apache/commons/commons-lang3/3.3.1/commons-lang3-3.3.1.jar Hello
Error: Could not find or load main class Hello
有人可以告诉我我在这里做错了什么吗?
【问题讨论】:
-
当没有明确定义类路径时,编译器会在当前文件夹中搜索。当您为外部 JAR 定义类路径时,您成功地告诉编译器它在哪里,但随后它忽略了当前目录。