Sat*_*Sat 4 java integration-testing tomcat maven-plugin maven
无法启动组件[StandardEngine [Tomcat] .StandardHost [localhost] .StandardContext [/ projectname]]
引起:java.lang.LinkageError:加载器约束违规:加载器(org/apache/catalina/loader/WebappClassLoader的实例)先前为名为"javax/servlet/ServletContext"的其他类型启动加载
org.apache.catalina.LifecycleException:无法启动组件[StandardEngine [Tomcat] .StandardHost [localhost]]
在打印堆栈跟踪中,它也没有提供任何内容ClassNotFoundException :HttpServletRequest.
我在pom.xml文件中添加了tomcat maven插件.我想运行一些集成测试,所以我在集成开始之前添加了插件来运行.这是我的插件
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8989</port>
<systemProperties>
<archaius.deployment.environment>test</archaius.deployment.environment>
</systemProperties>
<path>/${project.name}</path>
</configuration>
<executions>
<execution>
<id>tomcat-run</id>
<goals>
<goal>run</goal>
</goals>
<phase>pre-integration-test</phase>
<configuration>
<systemProperties>
<!-- We want test configuration for running integration tests. -->
<archaius.deployment.environment>test</archaius.deployment.environment>
<logback-lib.env>filesystem</logback-lib.env>
</systemProperties>
<fork>true</fork>
</configuration>
</execution>
<execution>
<id>tomcat-shutdown</id>
<goals>
<goal>shutdown</goal>
</goals>
<phase>post-integration-test</phase>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我在pom.xml文件中添加了这个插件.
我还添加servlet dependency并提供了范围provided.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我mvn clean install做出以下异常时
SEVERE:启动期间子容器失败java.util.concurrent.ExecutionException:org.apache.catalina.LifecycleException:无法在java.util启动组件[StandardEngine [Tomcat] .StandardHost [localhost] .StandardContext [/ projectpath]]. concurrent.FutureTask.report(FutureTask.java:122),位于org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)的java.util.concurrent.FutureTask.get(FutureTask.java:192) .apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)at org.apache.catalina.core.ContainerBase $ StartChild.call (ContainerBase.java:1559)位于java.util的java.util.concurrent.FutureTask.run(FutureTask.java:266)的org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549). concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.ru n(Thread.java:745)引起:org.apache.catalina.LifecycleException:无法在org.apache.catalina.util.LifecycleBase启动组件[StandardEngine [Tomcat] .StandardHost [localhost] .StandardContext [/ projectpath]] .start(LifecycleBase.java:154)... 6更多引起:java.lang.LinkageError:加载器约束违规:加载器(org/apache/catalina/loader/WebappClassLoader的实例)先前为具有名称的其他类型启动加载"的javax/servlet的/ ServletContext的" 处java.lang.ClassLoader.defineClass1(本机方法)在需要java.lang.ClassLoader.defineClass(ClassLoader.java:763)在java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) java.net.URLClassLoader.access java.net.URLClassLoader.access(URLClassLoader.java:477 .URLClassLoader $ 1.run(URLClassLoader.java:362)位于java.net.URLClassLoader.fin的java.security.AccessController.doPrivileged(Native Method)dClass(URLClassLoader.java:361)在org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1191)在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)在org.apache .catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)在java.lang.Class.getDeclaredMethods0(本机方法)在java.lang.Class.privateGetDeclaredMethods(Class.java:2701)在java.lang.Class.getDeclaredMethods (Class.java:1975)位于org.apache的org.apache.catalina.util.Introspection.getDeclaredMethods(Introspection.java:127)org.apache.catalina.startup.WebAnnotationSet.loadMethodsAnnotation(WebAnnotationSet.java:281). catalina.startup.WebAnnotationSet.loadApplicationFilterAnnotations(WebAnnotationSet.java:113)处org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:66): 405)在org.apache.catalina.startup.ContextConfig.co nfigureStart(ContextConfig.java:881)在org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)在org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)在org.apache位于org.apache.catalina.util.LifecycleBase.start的Org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)中的.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)(LifecycleBase.java) :150)......还有6个
2016年9月28日下午12:29:26 org.apache.catalina.core.ContainerBase startInternal SEVERE:启动时子容器失败java.util.concurrent.ExecutionException:org.apache.catalina.LifecycleException:启动组件失败[StandardEngine [Tomcat] .StandardHost [localhost]],位于org.apache.catalina的java.util.concurrent.FutureTask.report(FutureTask.java:122)java.util.concurrent.FutureTask.get(FutureTask.java:192). core.ContainerBase.startInternal(ContainerBase.java:1123)org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)at 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.j)ava:341)org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.startContainer(AbstractRunMojo.java:1238)at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.execute(AbstractRunMojo.的java:592)在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)在org.apache.maven .lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)org.apache.maven.life.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)在org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java :51)在org.apache的org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128).org.apache上的org.apache.maven.maven.DefaultMaven.execute(DefaultMaven.java:106)中的org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)中的maven.DefaultMaven.doExecute(DefaultMaven.java:307) .maven.cli.MavenCli.execute(MavenCli.java:863)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)org.apache.maven.cli.MavenCli.main(MavenCli.java) :199)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.反映.Method.invoke(Method.java:498)org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher. java:229)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)引起:org .apache.cat alina.LifecycleException:无法在org.apache.catalina.core.ContainerBase $ StartChild的org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)启动组件[StandardEngine [Tomcat] .StandardHost [localhost]] .call(ContainerBase.java:1559)位于java的java.util.concurrent.FutureTask.run(FutureTask.java:266)的org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1549). java.lang.ThreadPoolExecutor中的util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)java.lang.Thread.run(Thread.java:745)中的java.man.run(ThreadPoolExecutor.java:617)引起的: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更多
我解决了这个问题,其实javax.servlet在内部通过其他依赖invlolved http-lib和commons-util.
我用了
<exclusions>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
</exclusions>
Run Code Online (Sandbox Code Playgroud)
在两个依赖项中.然后问题解决了
| 归档时间: |
|
| 查看次数: |
6298 次 |
| 最近记录: |