我是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)
我做错了什么?
答案 0 :(得分:13)
当您使用 它也将忽略 如果您只是想从该jar调用一个类,请调用它:"-jar"
时仅 Class-Path
文件中META-INF/MANIFEST.MF
文件中定义的jar
属性将影响类路径。< / p>
MyClass
参数(或更具体地说:将其解释为MANIFEST.MF
中定义的主类的参数。)java -cp mainprog.jar:/mylib MyClass
// or using this one on windows:
java -cp mainprog.jar;/mylib MyClass
答案 1 :(得分:3)
在命令行中,您尝试将MyClass
作为程序运行,根据您的描述而不是您想要的。
你需要弄清楚用于在jar中执行程序的主类是什么。您可以使用jar -xf mainprog.jar
解压缩jar文件并查看META-INF/MANIFEST.MF
文件。它应该有一个条目,指示jar的主类(我现在不记得条目的名称)。
然后将命令行更改为以下内容:
java -classpath /mainprog.jar:/mylib package.name.to.jar.MainClass