Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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类路径以加载类文件_Java_Classpath - Fatal编程技术网

设置Java类路径以加载类文件

设置Java类路径以加载类文件,java,classpath,Java,Classpath,我是Java新手,不确定如何从单独的程序jar访问位于特定目录中的类文件 例如,我有一个位于/的第三方jar文件,它应该加载位于/mylib/MyClass.class的MyClass,所以我尝试运行: java -jar mainprog.jar -classpath "/mylib" MyClass 但我得到了一个错误: Exception in thread "main" java.lang.NoClassDefFoundError: MyClass Caused by: java.la

我是Java新手,不确定如何从单独的程序jar访问位于特定目录中的类文件

例如,我有一个位于/的第三方jar文件,它应该加载位于/mylib/MyClass.class的MyClass,所以我尝试运行:

java -jar mainprog.jar -classpath "/mylib" MyClass
但我得到了一个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: MyClass
Caused by: java.lang.ClassNotFoundException: MyClass
        at java.net.URLClassLoader$1.run(URLClassLoader.java:221)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:209)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:324)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:269)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:337)
我做错了什么?

当您使用
“-jar”
时,只有
jar
文件中的
META-INF/MANIFEST.MF
文件中定义的
类路径
属性会影响类路径

它还将忽略
MyClass
参数(或者更具体地说:将其解释为
MANIFEST.MF
中定义的主类的参数)

如果您只是想从该jar调用一个类,请按如下方式调用它:

java -cp mainprog.jar:/mylib MyClass
// or using this one on windows:
java -cp mainprog.jar;/mylib MyClass
java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass

在命令行中,您试图以程序的形式运行
MyClass
,而基于您的描述的程序并不是您想要的

您需要弄清楚用于在jar中执行程序的主类是什么。您可以使用
jar-xf mainprog.jar
解包jar文件,并查看
META-INF/MANIFEST.MF
文件。它应该有一个条目,指示jar的主类是(我现在记不起条目的名称)

之后,将命令行更改为以下内容:

java -cp mainprog.jar:/mylib MyClass
// or using this one on windows:
java -cp mainprog.jar;/mylib MyClass
java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass