一尘不染

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

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)

我究竟做错了什么?


阅读 245

收藏
2020-12-03

共1个答案

一尘不染

当您使用"-jar",然后 Class-Path中定义的属性META- INF/MANIFEST.MF文件里面jar的文件会影响到类路径。

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

如果您只想从该jar中调用类,则可以这样调用它:

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