2010-01-25 78 views
5

我是Java新手,我不确定如何从单独的程序jar中访问位于特定目录中的类文件。设置Java类路径以加载类文件

例如,我有位于/的第三方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) 

我在做什么错?

回答

11

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

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

如果你只是想打电话从罐子一类称呼它:

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

在命令行中,尝试运行MyClass作为一个程序,它根据您的描述是不是你想。

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

您的命令行比改变为这样的事情后:

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