在将我的应用程序部署到 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
class。这个类被类中的方法_getTweetsByQueryObj
引用com.frrole.service.common.City
。因此,在执行此方法时,tomcat 无法找到 OAuthUtil 类。OAuthUtil 类在其代码中定义了正确的包语句。该应用程序也可以成功编译,否则不会生成 ws.war。
令人困惑的部分是OAuthUtil
类与类在同一个包(和目录)中City
。下面是ls
tomcat的webapps文件夹的ws目录中的目录树。
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 的 localhost 上完美运行。该服务器在服务器上有 Java 7 和 Tomcat 7.0.25。
在部署应用程序时,我只是在 localhost 上编译它并将 ws.war 文件复制到服务器的 webapps 目录中,然后从以前的应用程序中复制 rm -r 的 ws 文件夹,最后重新启动服务器。
如果有人对这里发生的事情有任何解释,请提供一些解决方案。