'java myClass' 找不到.class文件,而 'java myClass.java' 却找不到?(OpenJ



当我运行java -cp foo.jar MyClass时,我不断收到错误:

Error: Could not find or load main class PrimVsKruskal
Caused by: java.lang.ClassNotFoundException: PrimVsKruskal

但是当我运行java -cp foo.jar MyClass.java它工作正常时。这发生在不同目录的不同文件中,是的,我已经运行了javac -cp foo.jar MyClass.java来生成.class字节码。

我也尝试运行java -cp foo.jar MyClass.class(相同的错误,但每行末尾都有".class"(,并且相当确定我只是不太了解java命令。当我删除 MyClass.class 文件并运行java -cp foo.jar MyClass.java它运行良好时,这似乎表明java在使用.java文件运行时正在编译自己的字节码,而不仅仅是解释字节码。这是真的吗?

任何这方面的帮助,或者只是比我从手册页中收集到的更好地理解java将不胜感激!我在网上搜索过,但是当我必须搜索"java命令"时,没有任何相关的内容出现。

不确定这是否重要,但我在 Ubuntu 18.04.4 上运行OpenJDK version "11.0.7" 2020-04-14

谢谢!

=

===========因评论而编辑:

.jar文件是来自 https://algs4.cs.princeton.edu/code/的 algs4.jar。给我这些相同错误的最小工作示例是:

import edu.princeton.cs.algs4.*;
public class MyClass{
public static void main(String[] args) {
System.out.println( "I am working! ");
}
}

您的问题是,当您包含-cp选项时,您将覆盖类路径。

因此,如果您的.class文件位于当前路径中,则必须写入:

// Linux or MacOS
java -cp ".:foo.jar" MyClass
// Windows
java -cp ".;foo.jar" MyClass

相关文章: 默认情况下,类路径中的当前路径是否为"."?

最新更新