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

我是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文件中定义的Class-Path属性才会影响类路径。

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

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

 java -cp mainprog.jar:/mylib MyClass // or using this one on windows: java -cp mainprog.jar;/mylib MyClass 

在命令行中,您尝试将MyClass作为程序运行,该程序根据您的描述而不是您想要的。

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

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

 java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass