我apoligize如果已经问过,但我一直无法找到任何是一样的。Jar文件无法运行,提取类运行良好
我创建了一个简单罐(myFailingJar.jar)文件与两类主要类和一个简单的类访问一个类和从另一个jar文件(CCJAPI.jar)其功能。
主类只实例化了简单的类中,简单的类加载共享库对象,并调用该跨越JNI内CCJAPI.jar的功能。
当与此命令,因为它无法找到CCJAPI.jar一类是在classpath失败jar文件运行: 的java -classpath /home/scott:/home/scott/CCJAPI.jar罐子myFailingJar.jar
开始
Exception in thread "main" java.lang.NoClassDefFoundError: ccjni/DeviceManager
at DetachedManager.DetachedDeviceManager.startManager(DetachedDeviceManager.java:24)
at DetachedManager.Main.main(Main.java:19)
Caused by: java.lang.ClassNotFoundException: ccjni.DeviceManager
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
如果我提取myFailingJar.jar文件的内容,并使用此命令它的工作原理,其据我可以告诉只是去提取的类文件运行并运行: 的java -classpath /home/scott:/home/scott/CCJAPI.jar DetachedManager.Main
开始 ** **开始成功 = - 现在要崩溃
这里既是源文件的内容:
简单类的主要
package DetachedManager;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
DetachedDeviceManager devMgr = new DetachedDeviceManager();
if(devMgr.startManager())
{
System.out.println("Success = - Going to crash now");
}
}
}
来源来源:
package DetachedManager;
import ccjni.DeviceManager;
public class DetachedDeviceManager {
{
System.load("/usr/lib/libccJNI.so");
}
public boolean startManager()
{
System.out.println("Starting");
DeviceManager.start();
System.out.println("** Started ** ");
return true;
}
}
唯一的区别是,一个是从jar文件中运行编译后的类,另一个在jar文件之外运行。它一定是某种我无法想象的类路径或路径问题。任何帮助将非常感激。
你有清单文件吗? – ApproachingDarknessFish
是指向主。 Apparenlty我刚才发现了这个问题。它是清单文件。如果我在清单中包含类路径,它将起作用。如果仅在命令行中指定,则不会。 – CoderG
谢谢你指点我正确的方向。我最后不得不到类路径添加到即使是在命令行上指定的路径清单文件。 这里是失败的表现: 清单-版本:1.0 创建-者:1.6.0_0(Sun微系统公司) 主类:DetachedManager.Main 这里是成功的体现 清单,版本:1.0 创建者:1.6.0_0(Sun Microsystems Inc.) 类路径:lib/CCAPI.jar Main-Class:DetachedManager.Main – CoderG