java.lang.NoClassDefFoundError : apache-tomcat-7. 0.25

标签 java apache tomcat web-deployment noclassdeffounderror

将我的应用程序部署到 tomcat 服务器时,我遇到以下错误:

2013-06-14 07:54:36 ErrorLogger [ERROR] Job (DEFAULT.NearByRioDeJaneiro threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NoClassDefFoundError: Could not initialize class com.frrole.service.common.OAuthUtil]
    at org.quartz.core.JobRunShell.run(JobRunShell.java:224)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.frrole.service.common.OAuthUtil
    at com.frrole.service.common.City._getTweetsByQueryObj(City.java:357)
    at com.frrole.service.common.City.getTweetsByGeoLocSearch(City.java:340)
    at com.frrole.service.api.TwitterSearch.nearbyLocationSearch(TwitterSearch.java:148)
    at com.frrole.service.imports.jobs.NearByRioDeJaneiro.execute(NearByRioDeJaneiro.java:14)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213)

从该错误日志中可以看出,主要问题是 tomcat 无法找到:com.frrole.service.common.OAuthUtil 类。此类由类 com.frrole.service.common.City 中的方法 _getTweetsByQueryObj 引用。因此,在执行此方法时,tomcat 无法找到 OAuthUtil 类。 OAuthUtil 类在其代码中定义了正确的包语句。该应用程序也可以成功编译,否则不会生成 ws.war。

令人困惑的部分是 OAuthUtil 类与 City 类位于同一包(和目录)中。下面是tomcat的webapps文件夹的ws目录下的ls目录树。

root@servicesfrrole3:/usr/tomcat/apache-tomcat-7.0.25/webapps/ws/WEB-INF/classes/com/frrole/service/common# ls -l
total 88
-rw-r--r-- 1 root root 12284 2013-06-14 13:15 City.class
-rw-r--r-- 1 root root 21350 2013-06-14 13:15 DBUtil.class
-rw-r--r-- 1 root root  1064 2013-06-14 13:15 Messages.class
-rw-r--r-- 1 root root  2026 2013-06-14 13:15 OAuthUtil$_AccessToken.class
-rw-r--r-- 1 root root  2741 2013-06-14 13:15 OAuthUtil.class
-rw-r--r-- 1 root root  1710 2013-06-14 13:15 ReTweet.class
-rw-r--r-- 1 root root  1431 2013-06-14 13:15 SQLUtils.class
-rw-r--r-- 1 root root  6397 2013-06-14 13:15 TimeAgo.class
-rw-r--r-- 1 root root  3363 2013-06-14 13:15 Tweet.class
-rw-r--r-- 1 root root  3730 2013-06-14 13:15 TweetUtil.class
-rw-r--r-- 1 root root  5982 2013-06-14 13:15 TweetVO.class
-rw-r--r-- 1 root root  1328 2013-06-14 13:15 TwitterResults.class
-rw-r--r-- 1 root root  1941 2013-06-14 13:15 ViaTweet.class

可以看出,显然有一个 OAuthUtil.class 与 City.class 位于同一目录中。该代码可以正确编译并在具有 Java 7 和 Tomcat 7.0.40 的本地主机上完美运行。服务器上有Java 7和Tomcat 7.0.25。

在部署应用程序时,我只需在本地主机上对其进行编译,然后将 ws.war 文件复制到服务器的 webapps 目录中,然后将先前应用程序中的 ws 文件夹的 rm -r 复制到服务器中,最后重新启动服务器。

如果有人对这里发生的事情有任何解释,请提供一些解决方案。

最佳答案

线索在异常消息中:

"Could not initialize class com.frrole.service.common.OAuthUtil"

实际发生的情况是,之前在某些类初始值设定项中发生了错误。 (可能是 OAuthUtil 类本身,也可能是它所依赖的其他类。)如果您回顾日志文件,您应该会看到异常。

现在您已经执行了一些依赖于先前初始化失败的类的代码。结果就是这个异常。

如果您在日志文件中找不到先前的异常,则可能是由于该异常被“压缩”,或者由于您的应用程序未定义默认的未捕获异常处理程序而导致某些线程死亡而丢失。

关于java.lang.NoClassDefFoundError : apache-tomcat-7. 0.25,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17104776/

相关文章:

apache - Apache 真的 "fork"以 mod_php/python 方式处理请求吗?

php - 推荐一个 PHP 脚本来创建 XML 站点地图? (爬/刮方法)

java - 无法从 Eclipse 查看 Tomcat 启动期间抛出的异常

java - 获取声明枚举的类

java - Apache JMeter 4.0 中的 JVM 错误

java - Java 编译是如何工作的?

apache - 将 json 字符串作为 post 请求发送时的错误字符串参数

java - Grails 应用程序占用太多内存

Java :Questions on clone method

java - 在java泛型中使用通配符类型