2013-05-30 38 views
0

在使用Java EE Eclipse(Juno)创建的Maven项目中,我有一个Hello Wolrd Servlet。 pom.xml中指定以下内容的依赖关系:Tomcat无法在Eclipse中的Tomcat上部署我的servlet(NoClassDefFoundError)

  • 的junit
  • Tomcat的服务器的API

“运行方式>的Maven安装” 似乎运行精细和/目标输出.war文件/。

这个.war部署(Apache应用程序管理器),并在使用tomcat 7.0.26-1ubuntu1.2(通过apt-get安装)的其他机器上正常运行。

我配置了Eclipse(使用服务器视图)以使用从tar.gz归档中提取的apache-tomcat-7.0.40安装。它也运行正常使用“运行”>在服务器上运行“。现在

,如果我添加此到的Hello World的servlet:

PropertiesConfiguration config = new 
PropertiesConfiguration("config.properties"); 

import org.apache.commons.configuration.ConfigurationException; 
import org.apache.commons.configuration.PropertiesConfiguration; 

,并添加以下的依赖,以我的pom.xml:

<dependency> 
    <groupId>commons-configuration</groupId> 
    <artifactId>commons-configuration</artifactId> 
    <version>1.9</version> 
</dependency> 

它在远程服务器上运行良好,但是在Eclipse中使用“运行方式”>“在服务器上运行”时,它会失败,这对ef来说并不酷够的开发&调试:

May 30, 2013 6:42:28 PM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/server:/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64:/usr/lib/jvm/java-6-openjdk-amd64/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib 
May 30, 2013 6:42:28 PM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:proxy' did not find a matching property. 
May 30, 2013 6:42:28 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-bio-8080"] 
May 30, 2013 6:42:28 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-bio-5443"] 
May 30, 2013 6:42:28 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["ajp-bio-8009"] 
May 30, 2013 6:42:28 PM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 561 ms 
May 30, 2013 6:42:28 PM org.apache.catalina.core.StandardService startInternal 
INFO: Starting service Catalina 
May 30, 2013 6:42:28 PM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/7.0.40 
May 30, 2013 6:42:28 PM org.apache.catalina.core.ContainerBase startInternal 
SEVERE: A child container failed during start 
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/proxy]] 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:111) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:679) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/proxy]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    ... 7 more 
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/configuration/ConfigurationException 
    at java.lang.Class.getDeclaredFields0(Native Method) 
    at java.lang.Class.privateGetDeclaredFields(Class.java:2318) 
    at java.lang.Class.getDeclaredFields(Class.java:1762) 
    at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106) 
    at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:261) 
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:140) 
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67) 
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:405) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5269) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 7 more 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.configuration.ConfigurationException 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
    ... 21 more 
May 30, 2013 6:42:28 PM org.apache.catalina.core.ContainerBase startInternal 
SEVERE: A child container failed during start 
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]] 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:111) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:684) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:679) 
Caused by: org.apache.catalina.LifecycleException: A child container failed during start 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 7 more 
May 30, 2013 6:42:28 PM org.apache.catalina.startup.Catalina start 
SEVERE: Catalina.start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:684) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456) 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 7 more 
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 9 more 
Caused by: org.apache.catalina.LifecycleException: A child container failed during start 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131) 
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 11 more 
May 30, 2013 6:42:28 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 239 ms 

读了一堆的帖子,我发现了一种方法,使其工作在做“属性>部署大会>添加> Java构建路径条目> Maven依赖”,但Maven的重置此设置一个“Maven>更新项目”。

是否可以在pom.xml中定义适当的设置以避免此问题?

额外信息:我正在使用maven-compiler-plugin和maven-war-plugin。 (可能是走错了路!)

+1

(可能)无关,但你不能部署你自己的servlet-api;你有没有把它定义为你的pom中“提供”的? –

+0

感谢您的提示。我更新为“提供”,它仍然在远端服务器上运行良好,并且在集成的eclipse上失败。 我刚刚在“Properties> Deployment Assembly> Add> Java Build Path Entries> Maven Dependencies”之前和之后做了项目差异,结果如下: /project /。类路径是不同的: '<\t \t \t <属性名= “org.eclipse.jst.component.dependency” 值= “/ WEB-INF/LIB”/>' 因此,我认为蚀不使用.war,或者至少不只是,并且使用这个.classpath文件。任何想法如何使maven正确生成此文件? – jeff

+0

我跟着: http://www.mkyong.com/maven/eclipse-web-deployment-assembly-maven-dependencies-issue/ 'MVN clean'然后'MVN蚀:日食-Dwtpversion = 2.0'然后'mvn install'然后“作为...运行” '/ project/org.eclipse.wst.common.component'已创建并且包含: ' ' 现在,无论我有在部署时的错误,无论是本地主机/项目/ servlet的导致了Err404 ... 第二个方法没有任何改善的事情。 – jeff

回答

0

使用M2E-WTP与WTP无缝集成:https://www.eclipse.org/m2e-wtp/

+0

我添加了插件,但我没有注意到任何改变。 但是,我找到了一个解决方案: 使用'maven-archetype-webapp'原型创建一个maven项目,而不是创建一个eclipse动态web项目并使用'configure> Convert to maven project'。的ressource不是found': 一些变化后,无论是在同'NoClassDefFoundError'无论是在'错误404再次失败。 在Eclipse服务器视图中使用全新的服务器声明(使用相同的tomcat安装)修复了此问题。 “Servers”项目配置文件上的差异没有显示任何相关的差异。 还是谢谢! :) – jeff

+0

BTW,给您的个人资料,你可能在知道我的开发环境利益(安装M2E-WTP后): '名称/ Version' 'Eclipse IDE中对Java EE开发\t 1.5.2.20130211-1820' 'M2E - Maven的集成为Eclipse \t 1.3.1.20130219-1424' 'M2E - SLF4J的logback上记录(可选)\t 1.3.1.20130219-1424' 'M2E-WTP - Maven的集成WTP(孵化)\t 0.17.0.20130212- 1821' 'Subversive SVN Connectors \t 3.0.0.I20130122-1700' 'Subversive SVN Team Provider \t 1.0.0.I20130122-1700' 'SVNK它1.3.8执行(可选)\t 3.0.0.I20121228-1700' '终端\t 1.1.2.201208131620' – jeff

+0

安装M2E-WTP应该工作后做的Maven>更新项目。 –

0

也许, 您需要设置Maven的依赖关系展开组件的一部分。

Eclipse - > Project-> properties-> Deployment Assembly - > Add - > Java Build path entries->选择maven dependencies。

这会让你的pom依赖性获得bundle作为你的web档案(web-inf/lib)的一部分。

+0

权,但正如我在我的问题说(可能是太长:P),该设置被reseted每次你运行一个Maven构建或'的Maven>更新project' .. – jeff