我刚刚从IDE转到Notepad来编写Java程序。该计划使用20个JAR。我成功编译了。当我决定使用
运行Java类文件时java -cp ".\\*" MyProgram
它给出了标准错误"无法找到或加载主类......"。
我很困惑,因为当我以前用现有文件夹中的所有文件运行java
命令时,它只会获取那些JAR,因为当前文件夹已经在类路径中。当程序从当前文件夹运行时,我尝试使用-cp "."
将其明确地包含在类路径中,但是它也没有工作。
最后,我能够使用此命令运行程序:
java -cp ".\\*;." MyProgram.java
我问这个问题是为了理解Java的类路径背后的实际逻辑。
如果我错了,请纠正我,但我认为JAR只是一个标准存档,其中所有包都封装在各自的文件夹中。如果所有JAR都在我当前的文件夹中,包括我的主类文件,那么为什么我不能用它来运行它:
java -cp "." MyProgram
或简单地说:
java MyProgram
如果问题在于要包含多个JAR文件,以及为什么我们使用".\\*"
将所有JAR包含在类路径中,那么为什么我们必须再次明确地包含当前文件夹classpath使用:
java ".\\*;." MyProgram
答案 0 :(得分:1)
类路径是包含程序的类和资源的jar文件和目录的列表。提及jar文件会将其内容添加到类路径中。
"./*"
将只获取当前目录中的jar文件,"."
将当前目录添加到类路径中。这允许访问所有类(和jar文件作为原始文件资源,但不能访问其内容,即包含在其中的类)。
如果在类路径中同时需要两者,则必须同时指定它们。
答案 1 :(得分:1)
要在命令提示符中包含运行程序所需的所有jar,请使用通配符*:
java -classpath E:\lib\* HelloWorld
您正在使用"。" 定义当前目录," ./*" 定义当前所有文件。目录
答案 2 :(得分:0)
"."
表示当前目录不是目录
"./*"
表示当前目录中的所有文件。
因此,您想要使用当前目录中的所有jar,以便第二个工作
答案 3 :(得分:0)
你已经回答了自己的问题。
.
表示它将在当前目录中查找.class
个文件。
JAR的行为就像一个目录。所以要有abc.jar"目录"你可以在类路径中指定abc.jar
。
如果您需要当前目录中存在的.class
文件以及当前目录中找到的JAR打包的.class
文件,您将拥有以下类路径:-cp ".:*.jar
< / p>
这里的所有答案都告诉您使用不带扩展名的通配符(*
或./*
),但这是一种不好的做法,您不希望Java查看无关文件,请指定扩展名:*.jar
。