当我运行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
相关文章: 默认情况下,类路径中的当前路径是否为"."?