运行Java命令,包括当前文件夹中的所有JAR

时间:2017-10-10 04:01:08

标签: java classpath

我刚刚从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

4 个答案:

答案 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