指定Java类路径变量

指定Java类路径变量,java,jar,classpath,Java,Jar,Classpath,我不熟悉Java,我正在尝试运行一段打包为jar文件的Java代码 在Windows命令行上,我指定jar文件夹的类路径,如下所示: set CLASSPATH="D:\jarFolder" 文件夹中有一个test.jar文件。但是当我运行这个 java -jar test.jar 它仍然失败,出现以下错误: Unable to access jarfile test.jar 我可以通过指定完整路径来运行test.jar。但是我想知道为什么类路径不起作用。我的理解是,它告诉java运行时j

我不熟悉Java,我正在尝试运行一段打包为jar文件的Java代码

在Windows命令行上,我指定jar文件夹的类路径,如下所示:

set CLASSPATH="D:\jarFolder"
文件夹中有一个test.jar文件。但是当我运行这个

java -jar test.jar
它仍然失败,出现以下错误:

Unable to access jarfile test.jar

我可以通过指定完整路径来运行test.jar。但是我想知道为什么类路径不起作用。我的理解是,它告诉java运行时jar文件的位置。

jar文件必须显式地位于类路径上。为jarfile指定类路径目录是不够的

请参见Java命令行上的:

使用此选项时,JAR文件是所有用户的源文件 类和其他用户类路径设置将被忽略

尝试使用

java -jar D:\jarFolder\test.jar
如果您知道jar入口点的主类名。你可以用

 set CLASSPATH="D:\jarFolder"
 java yourpackage.yourEntryPoint
您可以使用zip程序提取jar文件并读取,从而了解jar文件的入口点

使用-jar选项时,需要指定哪个jar。这样想吧。如果您没有给出jar名称,那么java应该执行哪个jar?您的类路径中可能有10个、20个或100个jar


但是如果你给类名,那么java会在jar之间搜索并执行正确的一个。

我尝试了这个
set CLASSPATH=“D:\jarFolder\test.jar”
,如果我使用
java-jar-test.jar
,仍然会出现相同的错误,但是如果我像这样指定包名
java a.b.ClassName
,它会起作用。不知道为什么…您正在指定开始类吗?支持在类路径上显式设置jarfile,这是调用不是清单中主类的类的唯一方法。是的,我指定的是start类。我只是感到困惑,为什么它不能结合CLASSPATH文件夹和test.jar文件名来创建完整路径。类路径向VM展示了如何找到JAR文件,该文件被视为没有清单的未爆炸zipfile。然后,您必须告诉VM您的特定main()恰好位于何处。coward的回答是“按设计”:)我尝试了这个
set CLASSPATH=“D:\jarFolder\test.jar”
,如果我使用
java-jar-test.jar
,仍然是相同的错误,但是如果我像这样指定包名
java a.b.ClassName
,它会起作用。不知道为什么…我的问题是,java运行时是如何计算jar完整路径的?因为java的参数是start类,您提供的是清单文件中找到的。java-jar。。。。只是为了方便起见,在类路径中添加一个jar文件,并在jar清单文件中标识的完全限定的开始类上调用java。这两个答案都是100%正确的,所以我不知道它们为什么不“有用”。我没有记下它们。是别人干的。