如何在 java 中正确设置类路径

How to set the classpath correctly in java

我需要使用 gson 库编译和 运行 简单代码,但我不能使用 Maven、Gradle 或 IDE。 该目录包含 Main.javagson-2.9.0.jar

javac -cp gson-2.9.0.jar Main.java 正常工作并创建 Main.class

但是当我运行java -cp ./*: Main时,我得到

Error: Could not find or load main class Main.

Caused by: java.lang.ClassNotFoundException: Main

我还尝试了以下命令:

java -cp gson-2.9.0.jar Main

java -cp gson-2.9.0.jar: Main

java -cp ./gson-2.9.0.jar:./* Main

但是所有这些命令都给出相同的结果。我以前从来没有在没有 Maven 或 IDEA 的情况下从命令行编写 运行 代码,所以我认为这是类路径规范的问题。我在这里做错了什么?

如果您的 main class 在一个包中(有一个 package ... 声明),您需要在 java 调用中包含包名称,例如java -cp ... mypackage.Main.

此外,java documentation 表示 -cp / --class-path:

As a special convenience, a class path element that contains a base name of an asterisk (*) is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR.

因此,对 .class 个文件使用 * 无效;相反,您必须指定目录名称。根据您的问题,您似乎正在使用 Linux,并且 .class 文件和 JAR 位于同一目录中,因此以下内容应该适用于您的情况:

java -cp gson-2.9.0.jar:. Main

(注意:后面的.,表示在class路径中包含当前目录)