运行 Java 命令包括当前文件夹中的所有 JAR
Running Java command including all JARs in current folder
我刚刚从 IDE 切换回记事本来编写 Java 程序。该程序使用 20 个 JAR。我编译成功了。当我决定使用 运行 Java class 文件时
java -cp ".\*" MyProgram
它给出了标准错误 "Couldn't find or load main class...."。
我很困惑,因为当我使用 运行 现有文件夹中所有文件的 java
命令时,它只会获取那些 JAR,因为当前文件夹已经在 class路径。由于该程序来自当前文件夹 运行ning,我尝试使用 -cp "."
将其显式包含在 class 路径中,但这也没有用。
最后我可以使用这个命令 运行 程序:
java -cp ".\*;." MyProgram.java
我问这个问题是为了理解 Java 的 class 路径背后的实际逻辑。
如果我错了请纠正我,但我认为 JAR 只是一个标准存档,其中所有包都封装在各自的文件夹中。如果所有 JAR 都在我当前的文件夹中,包括我的主 class 文件,那么为什么我不能 运行 它:
java -cp "." MyProgram
或简单地:
java MyProgram
如果问题在于要包含的多个 JAR 文件,这就是我们使用 ".\*"
将所有 JAR 包含在 class 路径中的原因,那么为什么我们必须显式包含当前文件再次在 class 路径中使用以下文件夹:
java ".\*;." MyProgram
class 路径是包含程序的 classes 和资源的 jar 文件和目录的列表。提及 jar 文件会将其内容添加到 class 路径。
"./*"
将只获取当前目录中的 jar 文件,"."
将当前目录添加到 class 路径。这允许访问所有 classes(以及作为原始文件资源的 jar 文件,但不能访问其内容,即其中包含的 classes)。
如果在 class 路径中需要两者,则必须同时指定。
"."
表示当前目录不是目录中的文件
"./*"
表示当前目录下的所有文件。
所以你想使用当前目录中的所有 jar,所以 2nd 可以工作
要在命令提示符中包含 运行 您的程序所需的所有 jar,请使用通配符 *:
java -classpath E:\lib\* HelloWorld
您正在使用 "."" 定义当前目录,"./*"" 定义当前目录中的所有文件。
你已经回答了你自己的问题,有点。
.
表示会在当前目录下寻找.class
个文件
JAR 就像一个目录。因此,要获得 abc.jar "directory",您需要在类路径中指定 abc.jar
。
如果您需要当前目录中存在的 .class
文件,以及打包到当前目录中找到的 JAR 中的 .class
文件,您将具有以下类路径:-cp ".:*.jar
这里的所有答案都告诉你使用不带扩展名的通配符(*
或 ./*
)但这是一个不好的做法,你不希望 Java 去查看不相关的文件,因此指定扩展名:*.jar
.
我刚刚从 IDE 切换回记事本来编写 Java 程序。该程序使用 20 个 JAR。我编译成功了。当我决定使用 运行 Java class 文件时
java -cp ".\*" MyProgram
它给出了标准错误 "Couldn't find or load main class...."。
我很困惑,因为当我使用 运行 现有文件夹中所有文件的 java
命令时,它只会获取那些 JAR,因为当前文件夹已经在 class路径。由于该程序来自当前文件夹 运行ning,我尝试使用 -cp "."
将其显式包含在 class 路径中,但这也没有用。
最后我可以使用这个命令 运行 程序:
java -cp ".\*;." MyProgram.java
我问这个问题是为了理解 Java 的 class 路径背后的实际逻辑。
如果我错了请纠正我,但我认为 JAR 只是一个标准存档,其中所有包都封装在各自的文件夹中。如果所有 JAR 都在我当前的文件夹中,包括我的主 class 文件,那么为什么我不能 运行 它:
java -cp "." MyProgram
或简单地:
java MyProgram
如果问题在于要包含的多个 JAR 文件,这就是我们使用 ".\*"
将所有 JAR 包含在 class 路径中的原因,那么为什么我们必须显式包含当前文件再次在 class 路径中使用以下文件夹:
java ".\*;." MyProgram
class 路径是包含程序的 classes 和资源的 jar 文件和目录的列表。提及 jar 文件会将其内容添加到 class 路径。
"./*"
将只获取当前目录中的 jar 文件,"."
将当前目录添加到 class 路径。这允许访问所有 classes(以及作为原始文件资源的 jar 文件,但不能访问其内容,即其中包含的 classes)。
如果在 class 路径中需要两者,则必须同时指定。
"."
表示当前目录不是目录中的文件
"./*"
表示当前目录下的所有文件。
所以你想使用当前目录中的所有 jar,所以 2nd 可以工作
要在命令提示符中包含 运行 您的程序所需的所有 jar,请使用通配符 *:
java -classpath E:\lib\* HelloWorld
您正在使用 "."" 定义当前目录,"./*"" 定义当前目录中的所有文件。
你已经回答了你自己的问题,有点。
.
表示会在当前目录下寻找.class
个文件
JAR 就像一个目录。因此,要获得 abc.jar "directory",您需要在类路径中指定 abc.jar
。
如果您需要当前目录中存在的 .class
文件,以及打包到当前目录中找到的 JAR 中的 .class
文件,您将具有以下类路径:-cp ".:*.jar
这里的所有答案都告诉你使用不带扩展名的通配符(*
或 ./*
)但这是一个不好的做法,你不希望 Java 去查看不相关的文件,因此指定扩展名:*.jar
.