Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-jar选项会改变类路径选项吗_Java_Classpath - Fatal编程技术网

java-jar选项会改变类路径选项吗

java-jar选项会改变类路径选项吗,java,classpath,Java,Classpath,我有一个jar文件,其中提到了清单中的主类。 当我尝试使用以下命令执行jar时 java -cp .;./* com.foo.MainClass java -cp .;./* -jar myjar.jar 代码执行并工作 当我尝试使用以下命令执行jar时 java -cp .;./* com.foo.MainClass java -cp .;./* -jar myjar.jar 对于与myjar.jar位于同一文件夹中的一些jar,我得到了类notfound执行选项。我希望-cp选项将这

我有一个jar文件,其中提到了清单中的主类。 当我尝试使用以下命令执行jar时

java -cp .;./* com.foo.MainClass
java -cp .;./* -jar myjar.jar
代码执行并工作

当我尝试使用以下命令执行jar时

java -cp .;./* com.foo.MainClass
java -cp .;./* -jar myjar.jar
对于与myjar.jar位于同一文件夹中的一些jar,我得到了类notfound执行选项。我希望-cp选项将这些JAR包含在类路径中。 我修改了代码以打印java.class.path属性。在第一种情况下,它列出了当前目录中的所有jar,在第二种情况下,它只列出了myjar.jar

我还修改了清单,将类路径元素与所有JAR一起添加到清单中。然后第二个命令工作。但在我的代码中,我试图加载一个aribtrary类,其名称在命令提示符下提供,因此我希望类路径包含文件夹中的所有jar。如何使第二个命令在此场景中工作?

From

可执行JAR必须引用它所依赖的所有其他JAR 需要通过清单文件的类路径头。这个 环境变量CLASSPATH和 如果使用-jar选项,JVM将忽略命令行


您需要自己的类加载器来处理这个问题
-jar
只尊重清单中的信息,不允许使用通配符


您可能会发现可重新加载类的示例很有用:

是关于这个问题的一个很好的讨论。

请看一看。这应该可以解决您的CP问题。@flash:可能不会。他说他在编译时不知道额外的类路径(否则他可以直接将其添加到清单中)。听起来你必须使用自己的类加载器(这会根据你的环境添加内容)。@Thilo,没错,我需要在运行时使用加载额外的类。从下面的响应来看,似乎我需要使用URLClassLoader自己加载一些类。另一个选项是求助于批处理文件或其他类型的包装器(以便您可以使用通配符或编程发现)。谢谢!这是否意味着,如果我想加载一个aribtrary类,其jar文件与我的jar文件位于同一位置(并且在我的清单中没有提到),我需要使用URLClassLoader显式加载该jar?您可以向清单类路径添加类似于
plugins/*
的内容。jar文件的文件夹是固定的,但其中的所有jar都应该被拾取。或者可能不是:“但是,类路径jar清单头中不支持类路径通配符。”-(