关于linux:org.springframework.webflow.util.RandomGuid上的错误java.lang.NoClassDefFoundError

Error java.lang.NoClassDefFoundError on org.springframework.webflow.util.RandomGuid

很抱歉,我的问题很愚蠢,但是作为Java文盲,我无法回答。我在CentOS5(对于CAS服务器)上运行了一个tomcat(5),当我尝试打开此URL http://192.168.1.17:8080/cas-server-webapp-3.3.1/login时,出现此错误:

第一个错误:
java.lang.NoClassDefFoundError:无法初始化类org.springframework.webflow.util.RandomGuid

和根本错误:
org.springframework.web.util.NestedServletException:处理程序处理失败;嵌套异常是java.lang.NoClassDefFoundError:无法初始化类org.springframework.webflow.util.RandomGuid

$ CLASSPATH为空,这似乎是一个问题,但是我不知道要放什么。

编辑:贾里德是对的,我的主机文件将127.0.0.1定义为localhost,现在它运行良好!


在这种情况下,在我们的头脑中保持两个或三个不同的异常状态很重要:

  • java.lang.ClassNotFoundException此异常表明在类路径上找不到该类。这表明我们正在尝试加载类定义,并且该类在类路径中不存在。

  • java.lang.NoClassDefFoundError此异常表明JVM在其内部类定义数据结构中查找了类的定义,但未找到。这与说无法从类路径中加载不同。通常,这表明我们以前曾尝试从类路径中加载类,但是由于某种原因它失败了-现在我们再次尝试,但我们甚至不打算尝试加载它,因为我们之前加载失败。较早的故障可能是ClassNotFoundException或ExceptionInInitializerError(指示静态初始化块中的故障)或许多其他问题。关键是,NoClassDefFoundError不一定是类路径问题。

  • 话虽这么说,另一个回答者指出,RandomGUID需要调用InetAddress.getLocalHost()。在许多操作系统上,这将触发使用主机文件的主机查找(在* NIX系统上为/etc/hosts,在Windows系统上为%WINDOWS%/system32/drivers/etc/HOSTS。)

    当该文件错误地定义了本地主机地址时,我经常看到类似的错误。 127.0.0.1应该指向'localhost'(可能还指向localhost.localdomain。)它不应指向计算机的实际主机名(尽管由于某些原因,许多较旧的RedHat Linux安装程序喜欢错误地设置它)。 >


    原因是无法加载类RandomGUID。

    通过查看RandomGUID源代码,其静态初始化程序在InetAddress.getLocalHost()上出现故障的大多数机会。

    主机上是否有一些奇怪的网络配置?例如,/ etc / hosts中没有或奇怪的localhost定义?


    NoClassDef:编译当前执行的类时已存在搜索到的类定义,但不再可以找到该定义。当您缺少spring类时,我想您可能是其中一个spring jar文件。

    有2个地方可以将罐子放在tomcat中,有一个全局区域(在5个区域中,它类似于common / lib,与tomcat6中的有所不同),而该区域仅适用于您的web应用程序,即webapps / mywebapp / WEB -INF / lib。您应用的jar确实应该放在这里,但是如果您真的很困惑并且无法找到其他使它工作的方法,它们将在全局范围内工作(如果您在全局范围内只有其中的一部分,则可能也会中断,因为他们可能需要在另一个jar中添加一个类,并且如果一个在本地,则无法正常工作。这对于spring库尤其如此,因为存在许多单独的jar,而不仅仅是一个。

    您的CLASSPATH是jvm查找类的所有地方的列表。这可能包括类文件的目录,或类的jar或zip文件,它们的目录类似于目录。 Tomcat应该通过正确使用上述目录为您加载该文件。


    现在,不应使用环境变量$ CLASSPATH;相反,Java应用程序应在命令行上设置类路径。

    但是,对于web应用程序中使用的tomcat和库,只需将JAR(用于Spring)放入tomcat安装的shared / lib /文件夹中。


    如果这突然和不合逻辑地出现在您正在构造的内容上,请尝试重命名和重命名错误日志中引用的类。这在Netbeans中帮助了我几次。