我刚刚从IDE切换回记事本来编写Java程序。该计划正在使用20个JAR。我编译成功。当我决定运行Java类文件时使用运行Java命令,包括当前文件夹中的所有JAR
java -cp ".\\*" MyProgram
它给出标准错误“无法找到或加载主类....”。
我很困惑,因为当我用现有文件夹中的所有文件运行java
命令时,它只会获得这些JAR,因为当前文件夹已经在类路径中。当程序从当前文件夹运行时,我尝试使用-cp "."
将它明确地包含在类路径中,但这也不起作用。
最后我能够用这个命令运行程序:
java -cp ".\\*;." MyProgram.java
我问这个问题,了解背后的Java的类路径中的实际逻辑。
纠正我,如果我错了,但我认为JAR只是一个标准的归档,其中所有的软件包都封装在各自的文件夹中。
java -cp "." MyProgram
或者干脆:如果所有的JAR文件都在我的当前文件夹包括我的主类文件,那么为什么我不能与运行
java MyProgram
如果问题是与多个JAR文件包括这就是为什么我们使用".\\*"
包括在类路径中的所有JAR文件,那么为什么我们要明确在classpath中再次使用包含在当前文件夹:
java ".\\*;." MyProgram
http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html。请参见“类路径通配符”一节。 Quote:“类路径条目可以包含基本名称通配符('*'),这被认为是相当于指定扩展名为.jar或.JAR的目录中所有文件的列表。例如,类路径entry'mydir/*'指定名为mydir的目录中的所有JAR文件,由'*'组成的类路径条目展开为当前目录中所有jar文件的列表。所以你真的只需要'cp'* ;.“' –