我有一个在Red Hat Enterprise Linux服务器上运行的大型Java应用程序。这个应用程序有大约100个罐子。在大多数RHEL系统上,应用程序运行正常,但是,在某些RHEL系统上(所有RHEL版本都相同)我在启动时获得NoClassDefFoundError(在我的应用程序有机会做任何事情之前)。如果我重命名包含该类的JAR文件(例如com-test-1.3.4.jar - > com-test-1.3.4-2.jar),即使重命名不会改变顺序,一切都会启动很好在我的目录列表中的JAR。如果我将JAR文件添加到类路径的开头,它可以很好地工作。在具有完全相同的OS / classpath / java / jars的其他系统上,它可以很好地工作。如果我尝试运行java说缺少的类(在重命名之前),java报告该类没有main方法,所以我知道类本身是可加载/可查找的。我已经尝试了最新版本的Java 1.7而没有运气。使用通配符运算符指定类路径(例如CLASSPATH = / home / test /*)。
实际例外:
Exception in thread "main" java.lang.NoClassDefFoundError: com/test/testpath/TestClass
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
at java.lang.Class.getMethod0(Class.java:2774)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: com.test.testpath.TestClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 6 more