7

对不起,我的问题很愚蠢,但作为一个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 是空的,好像有问题,但是不知道往里面放什么。

编辑:Jared 是对的,我的主机文件将 127.0.0.1 定义为 localhost,现在它工作得很好!

4

5 回答 5

25

在这种情况下,重要的是要牢记两三个不同的例外情况:

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

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

话虽如此,另一个答案海报表明 RandomGUID 需要调用 InetAddress.getLocalHost()。在许多操作系统上,这将触发使用主机文件的主机查找(/etc/hosts在 *NIX 系统上,%WINDOWS%/system32/drivers/etc/HOSTS在 Windows 系统上。)

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

于 2009-01-12T18:55:08.343 回答
1

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

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

于 2008-12-17T17:33:55.613 回答
1

NoClassDef:在编译当前执行的类时,搜索到的类定义已经存在,但无法再找到该定义。由于您缺少一个弹簧类,我猜您缺少一个弹簧 jar 文件。

有 2 个地方可以在 tomcat 中放置 jar,有一个全局区域(在 5 中类似于 common/lib,在 tomcat6 中有点不同)和仅用于您的 webapp 的区域,即 webapps/mywebapp/WEB-INF/库。你的应用程序的 jars 真的应该放在这里,但是如果你真的很困惑并且想不出任何其他方法让它工作,它们将在全局中工作(如果你在全局中只有其中一些可能也会中断,因为他们可能需要另一个 jar 中的类,如果其中一个在本地,它将无法工作。对于 spring 库尤其如此,因为有许多单独的 jar,而不仅仅是一个)。

您的 CLASSPATH 是 jvm 查找类的所有位置的列表。这可能包括类文件的目录,或者类的 jar 或 zip 文件,它们像目录一样列出。Tomcat 应该通过正确使用上述目录为您加载它。

于 2008-12-17T17:52:50.053 回答
1

原因是无法加载类 RandomGUID。

通过查看 RandomGUID,它的静态初始化程序在 InetAddress.getLocalHost() 失败的大部分机会。

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

于 2008-12-17T18:19:51.947 回答
0

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

于 2012-02-08T18:33:48.650 回答