我想使用 embedded tomcat
而不是独立版本启动Web应用程序 . 为了做到这一点,我已经在 pom.xml
中声明了tomcat maven插件 . 当我试图启动时, I got this error :
Exception in thread "Thread-2" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils
at org.apache.tomcat.maven.plugin.tomcat7.run.RunMojo$2.run(RunMojo.java:295)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.FileUtils
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
... 1 more
This is my POM.xml's configuration :
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat-maven-plugin.version}</version>
<configuration>
<port>8080</port>
<path>/ppc-v2.webapp</path>
</configuration>
<dependencies>
<dependency>
<groupId>upgrade.karavel.framework</groupId>
<artifactId>framework.integration.camel.extension</artifactId>
<version>${framework.camel.extension.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-servlet_2.5_spec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>upgrade.karavel.framework</groupId>
<artifactId>framework.frontend.web</artifactId>
<version>${framework.frontend.web.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
编辑:我在日志顶部有以下堆栈跟踪:
GRAVE:一个子容器开始java.util.concurrent.ExecutionException期间失败:org.apache.catalina.LifecycleException:未能启动成分[StandardEngine [Tomcat的] .StandardHost [本地主机] .StandardContext [/ppc-v2.webapp]] at java.util.concurrent.FutureTask.report(FutureTask.java:122)at java.util.concurrent.FutureTask.get(FutureTask.java:192)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java) :1123)在org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)在org.apache.catalina.core . ContainerBase $ StartChild.call(ContainerBase.java:1559)atg.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549)at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread .run(Thread.java:748)引起:org.apache.catalina.LifecycleException:无法在org.apache中启动组件[StandardEngine [Tomcat] .StandardHost [localhost] .StandardContext [/ppc-v2.webapp]] . java.lang.ClassCastException:catalina.util.LifecycleBase.start(LifecycleBase.java:154)... 6更所致org.springframework.web.SpringServletContainerInitializer不能org.apache.catalina被转换为javax.servlet.ServletContainerInitializer .startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1670)在org.apache.catalina.startup.ContextConfig.getServletContainerInitializers(ContextConfig.java:1652)在org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1562 )在org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270)在org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)在org.apache.catalina.startup.ContextConfig . org.apache.catalin中的lifecycleEvent(ContextConfig.java:376) a.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)在org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)在org.apache.catalina.core.StandardContext.startInternal(StandardContext.java: 5322)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)... 6月9日 . 03,2018下午12时34分07秒org.apache.catalina.core.ContainerBase startInternal坟墓开始java.util.concurrent.ExecutionException在子容器失败:org.apache.catalina.LifecycleException:无法启动组件[StandardEngine [ Tomcat] .StandardHost [localhost]],位于org.apache.catalina.core的java.util.concurrent.FutureTask.report(FutureTask.java:122)java.util.concurrent.FutureTask.get(FutureTask.java:192) .ContainerBase.startInternal(ContainerBase.java:1123)在org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)在org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)在org.apache.catalina.core.StandardServer.startInternal( StandardServer.java:732)org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)org.apache.catalina.startup.Tomcat.start(Tomcat.java:3 41)在org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.startContainer(AbstractRunMojo.java:1238)在org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.execute(AbstractRunMojo.java: 592)在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)在org.apache.maven.lifecycle .internal.MojoExecutor.execute(MojoExecutor.java:153)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder .java:116)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)atorg.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)位于org.apache的org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) . maven.DefaultMaven.doExecute(DefaultMaven.java:347)org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)atg.apache.maven.cli.MavenCli.execute(MavenCli.java:582)org位于org.apache.maven.cli.MavenCli.main(MavenCli.java:158)的.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun .reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)位于org.codehaus的java.lang.reflect.Method.invoke(Method.java:498)的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) . 在org.codehaus.plexus.classworlds的org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)上的plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) .launcher.Launcher.mainWithExitCode(Launcher.java:415)at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)引起:org.apache.catalina.LifecycleException:无法启动组件[ StandardEngine [Tomcat] .StandardHost [localhost]]在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)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.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor) .java:1149)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)引起:org.apache.catalina.LifecycleException:在Org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)的org.apache.catalina.core.StandardHost.startInternal(StandardHost)启动时,子容器失败.java:800)在org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)... 6更多
2 回答
您可以通过在pom.xml中添加此依赖项来包含Apache commons-io jar
如果你想在tomcat lib中添加jar文件你可以做的就是从https://commons.apache.org/proper/commons-io/download_io.cgi下载jar文件并转到你安装tomcat的位置并转到lib文件夹并复制粘贴jar . 就我而言,我的位置是
您可以同样检查本地系统 .
谢谢大家,但你无法解决我的问题:D我注意到我仍然使用jetty插件,其中一个名为jetty-jndi的依赖项包括servlet-api,它与嵌入式tomcat的servlet-api发生冲突 . 由于某些未知原因,我无法在maven依赖项中看到这个jar:Eclipse的树 .
这就是我得到这个错误的原因 .
谢谢大家 .
最好的祝福