NoClassDefFoundError в веб-приложении, работающем на Tomcat 7
У меня есть веб-приложение, написанное на Java с использованием инфраструктуры gucie-servlet, создаваемой Maven 3. Когда я развертываю его в контейнере Tomcat 7 и пытаюсь получить к нему доступ через браузер, Tomcat отвечает кодом состояния 404. Это журнал от Tomcat:
Apr 4, 2013 11:39:50 AM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Apr 4, 2013 11:39:50 AM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()
Apr 4, 2013 11:39:55 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class ru.hive.webserver.config.HiveServletConfig
java.lang.NoClassDefFoundError: ru/hive/base/db/modules/DatabaseModule
at ru.hive.webserver.config.HiveServletConfig.getInjector(HiveServletConfig.java:24)
at com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:45)
at ru.hive.webserver.config.HiveServletConfig.contextInitialized(HiveServletConfig.java:19)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: ru.hive.base.db.modules.DatabaseModule
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
... 17 more
Apr 4, 2013 11:39:55 AM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Apr 4, 2013 11:39:55 AM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Apr 4, 2013 11:39:55 AM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@e8606c')
Исключение говорит, что в CLASSPATH моего приложения нет класса с именем ru.hive.base.db.modules.DatabaseModule, но это не так:
frodo@shire:~/apache-tomcat-7.0.37/webapps/hive/WEB-INF/lib$ ls -l
total 30132
-rw-rw-r-- 1 frodo frodo 4467 нояб. 22 13:46 aopalliance-1.0.jar
-rw-rw-r-- 1 frodo frodo 27010023 апр. 4 11:39 base-0.0.42-SNAPSHOT.jar
-rw-rw-r-- 1 frodo frodo 232019 дек. 18 10:12 commons-beanutils-1.8.3.jar
-rw-rw-r-- 1 frodo frodo 58160 авг. 2 2011 commons-codec-1.4.jar
-rw-rw-r-- 1 frodo frodo 196768 дек. 18 10:12 commons-digester-2.1.jar
-rw-rw-r-- 1 frodo frodo 163151 нояб. 22 13:46 commons-io-2.1.jar
-rw-rw-r-- 1 frodo frodo 60686 авг. 2 2011 commons-logging-1.1.1.jar
-rw-rw-r-- 1 frodo frodo 189285 нояб. 28 15:01 gson-2.2.2.jar
-rw-rw-r-- 1 frodo frodo 710492 февр. 6 18:59 guice-3.0.jar
-rw-rw-r-- 1 frodo frodo 65012 февр. 13 13:21 guice-servlet-3.0.jar
-rw-rw-r-- 1 frodo frodo 352585 нояб. 22 13:46 httpclient-4.1.3.jar
-rw-rw-r-- 1 frodo frodo 181410 нояб. 22 13:46 httpcore-4.1.4.jar
-rw-rw-r-- 1 frodo frodo 26938 нояб. 22 13:46 httpmime-4.1.3.jar
-rw-rw-r-- 1 frodo frodo 2497 февр. 6 18:59 javax.inject-1.jar
-rw-rw-r-- 1 frodo frodo 31866 февр. 6 18:59 jsr305-2.0.1.jar
-rw-rw-r-- 1 frodo frodo 25962 нояб. 22 13:46 slf4j-api-1.6.4.jar
-rw-rw-r-- 1 frodo frodo 371816 нояб. 22 13:46 solr-solrj-4.0.0.jar
-rw-rw-r-- 1 frodo frodo 520969 нояб. 22 13:46 wstx-asl-3.2.7.jar
-rw-rw-r-- 1 frodo frodo 608239 нояб. 22 13:46 zookeeper-3.3.6.jar
JAR base-0.0.42-SNAPSHOT.jar содержит класс, который Tomcat может 'т найти. Структура каталогов внутри JAR такая же, как в полном имени класса в трассировке стека. Pom.xml для моего проекта:
4.0.0
webserver
0.0.42-SNAPSHOT
war
Api servlet
ru.hive
main
0.0.41-SNAPSHOT
../main
dev
true
http://localhost:8983/solr
org.apache.tomcat.maven
tomcat7-maven-plugin
2.0
local_tomcat
http://192.168.0.39:8080/manager/text
/hive
true
user
pass
production
http://localhost:8983/solr/hive
org.apache.tomcat.maven
tomcat7-maven-plugin
2.0
production_tomcat
http://some.ip.address:8080/manager/text
/hive
true
user
pass
ru.hive
base
0.0.42-SNAPSHOT
com.google.inject.extensions
guice-servlet
3.0
com.google.code.findbugs
jsr305
2.0.1
org.apache.solr
solr-solrj
4.0.0
com.google.code.gson
gson
2.2.2
commons-digester
commons-digester
2.1
javax.servlet
servlet-api
2.5
provided
junit
junit
4.11
test
false
central
Maven Repository Switchboard
http://repo1.maven.org/maven2
repo
true
ignore
false
file://${project.basedir}/lib
never
false
central
Maven Plugin Repository
http://repo1.maven.org/maven2
hive
src/main/java
src/main/scripts
src/test/java
target/classes
target/test-classes
target
maven-antrun-plugin
1.3
maven-assembly-plugin
2.2-beta-5
maven-dependency-plugin
2.1
maven-release-plugin
2.0
maven-war-plugin
2.3
default-war
package
war
true
lib/
true
lib/
src/main/webapp/META-INF
context.xml
true
META-INF
maven-clean-plugin
2.4.1
default-clean
clean
clean
maven-install-plugin
2.3.1
default-install
install
install
maven-resources-plugin
2.4.3
UTF-8
default-resources
process-resources
resources
default-testResources
process-test-resources
testResources
maven-surefire-plugin
2.7.1
default-test
test
test
maven-compiler-plugin
2.3.2
default-testCompile
test-compile
testCompile
default-compile
compile
compile
src/main/resources
true
target/site
Итак, вопрос в том, что я делаю неправильно и почему я получаю это исключение ClassDefNotFound?
PS. Отредактированная версия конфигурации maven-war-plugin:
maven-war-plugin
2.3
default-war
package
war
src/main/webapp/META-INF
context.xml
true
META-INF
PPS. ru.hive.webserver.config.HiveServletConfig список классов
package ru.hive.webserver.config;
import javax.servlet.ServletContextEvent;
import ru.hive.base.db.modules.DatabaseModule;
import ru.hive.base.state.modules.StateManagerModule;
import ru.hive.webserver.api.ApiServlet;
import ru.hive.webserver.scheduler.Scheduler;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletModule;
public class HiveServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServletModule() {
@Override
protected void configureServlets() {
install(new DatabaseModule());
install(new StateManagerModule());
serve("/api").with(ApiServlet.class);
serve("/scheduler").with(Scheduler.class);
}
});
}
}
PPPS. Список JAR в:/lib
`-rw-r--r-- 1 jcdenton jcdenton 15264 марта 22 18:38 annotations-api.jar
-rw-r--r-- 1 jcdenton jcdenton 54176 марта 22 18:38 catalina-ant.jar
-rw-r--r-- 1 jcdenton jcdenton 132729 марта 22 18:38 catalina-ha.jar
-rw-r--r-- 1 jcdenton jcdenton 1563926 марта 22 18:38 catalina.jar
-rw-r--r-- 1 jcdenton jcdenton 255182 марта 22 18:38 catalina-tribes.jar
-rw-r--r-- 1 jcdenton jcdenton 1796326 марта 22 18:38 ecj-4.2.1.jar
-rw-r--r-- 1 jcdenton jcdenton 46085 марта 22 18:38 el-api.jar
-rw-r--r-- 1 jcdenton jcdenton 123241 марта 22 18:38 jasper-el.jar
-rw-r--r-- 1 jcdenton jcdenton 599131 марта 22 18:38 jasper.jar
-rw-r--r-- 1 jcdenton jcdenton 88690 марта 22 18:38 jsp-api.jar
-rw-r--r-- 1 jcdenton jcdenton 177599 марта 22 18:38 servlet-api.jar
-rw-r--r-- 1 jcdenton jcdenton 6873 марта 22 18:38 tomcat-api.jar
-rw-r--r-- 1 jcdenton jcdenton 795308 марта 22 18:38 tomcat-coyote.jar
-rw-r--r-- 1 jcdenton jcdenton 235411 марта 22 18:38 tomcat-dbcp.jar
-rw-r--r-- 1 jcdenton jcdenton 77364 марта 22 18:38 tomcat-i18n-es.jar
-rw-r--r-- 1 jcdenton jcdenton 48693 марта 22 18:38 tomcat-i18n-fr.jar
-rw-r--r-- 1 jcdenton jcdenton 51678 марта 22 18:38 tomcat-i18n-ja.jar
-rw-r--r-- 1 jcdenton jcdenton 123958 марта 22 18:38 tomcat-jdbc.jar
-rw-r--r-- 1 jcdenton jcdenton 23174 марта 22 18:38 tomcat-util.jar`