使用maven的tomcat插件啓動時報錯問題

1、最近在學習Apache下的一個權限框架shiro。在eclipse上建了一個web項目,使用maven引入對應的依賴。在spring和springMVC等配置都準備好後,準備跑一下JSP頁面確保環境沒問題,跑的時候使用的也是maven的tomcat7插件,在pom.xml的插件配置處配置如下:

[html] view plain copy
  1. <build>  
  2.     <finalName>shiro</finalName>  
  3.           
  4.     <!-- tomcat7 配置插件 -->  
  5.     <plugins>  
  6.         <plugin>  
  7.             <groupId>org.apache.tomcat.maven</groupId>  
  8.             <artifactId>tomcat7-maven-plugin</artifactId>  
  9.             <configuration>  
  10.                 <port>8080</port>  
  11.                 <path>/</path>  
  12.                 <uriEncoding>UTF-8</uriEncoding>  
  13.             </configuration>  
  14.         </plugin>  
  15.     </plugins>  
  16. </build>  
2、然後在eclipse中使用maven命令執行,如下:

clean tomcat7:run

3、此時報錯,如下:

[plain] view plain copy
  1. [INFO] Scanning for projects...  
  2. [WARNING]   
  3. [WARNING] Some problems were encountered while building the effective model for com.shiro.test.spring:shiro-test-spring:war:0.0.1-SNAPSHOT  
  4. [WARNING] 'build.plugins.plugin.version' for org.apache.tomcat.maven:tomcat7-maven-plugin is missing. @ line 114, column 12  
  5. [WARNING]   
  6. [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.  
  7. [WARNING]   
  8. [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.  
  9. [WARNING]   
  10. [INFO]                                                                           
  11. [INFO] ------------------------------------------------------------------------  
  12. [INFO] Building shiro-test-spring Maven Webapp 0.0.1-SNAPSHOT  
  13. [INFO] ------------------------------------------------------------------------  
  14. [INFO]   
  15. [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ shiro-test-spring ---  
  16. [INFO] Deleting D:\WorkSpace\EclipseWorkSpace\shiro-test-spring\target  
  17. [INFO]   
  18. [INFO] >>> tomcat7-maven-plugin:2.2:run (default-cli) > process-classes @ shiro-test-spring >>>  
  19. [INFO]   
  20. [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ shiro-test-spring ---  
  21. [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!  
  22. [INFO] Copying 2 resources  
  23. [INFO]   
  24. [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ shiro-test-spring ---  
  25. [INFO] Nothing to compile - all classes are up to date  
  26. [INFO]   
  27. [INFO] <<< tomcat7-maven-plugin:2.2:run (default-cli) < process-classes @ shiro-test-spring <<<  
  28. [INFO]   
  29. [INFO] --- tomcat7-maven-plugin:2.2:run (default-cli) @ shiro-test-spring ---  
  30. [INFO] Running war on http://localhost:8080/  
  31. [INFO] Creating Tomcat server configuration at D:\WorkSpace\EclipseWorkSpace\shiro-test-spring\target\tomcat  
  32. [INFO] create webapp with contextPath:   
  33. 一月 02, 2017 2:01:36 下午 org.apache.coyote.AbstractProtocol init  
  34. 信息: Initializing ProtocolHandler ["http-bio-8080"]  
  35. 一月 02, 2017 2:01:36 下午 org.apache.catalina.core.StandardService startInternal  
  36. 信息: Starting service Tomcat  
  37. 一月 02, 2017 2:01:36 下午 org.apache.catalina.core.StandardEngine startInternal  
  38. 信息: Starting Servlet Engine: Apache Tomcat/7.0.47  
  39. 一月 02, 2017 2:01:38 下午 org.apache.catalina.core.ContainerBase startInternal  
  40. 嚴重: A child container failed during start  
  41. java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]  
  42.     at java.util.concurrent.FutureTask.report(FutureTask.java:122)  
  43.     at java.util.concurrent.FutureTask.get(FutureTask.java:192)  
  44.     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)  
  45.     at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)  
  46.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)  
  47.     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)  
  48.     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)  
  49.     at java.util.concurrent.FutureTask.run(FutureTask.java:266)  
  50.     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)  
  51.     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)  
  52.     at java.lang.Thread.run(Thread.java:745)  
  53. Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]  
  54.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)  
  55.     ... 6 more  
  56. Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/servlet/ServletContext"  
  57.     at java.lang.ClassLoader.defineClass1(Native Method)  
  58.     at java.lang.ClassLoader.defineClass(ClassLoader.java:763)  
  59.     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)  
  60.     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)  
  61.     at java.net.URLClassLoader.access$100(URLClassLoader.java:73)  
  62.     at java.net.URLClassLoader$1.run(URLClassLoader.java:368)  
  63.     at java.net.URLClassLoader$1.run(URLClassLoader.java:362)  
  64.     at java.security.AccessController.doPrivileged(Native Method)  
  65.     at java.net.URLClassLoader.findClass(URLClassLoader.java:361)  
  66.     at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1191)  
  67.     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)  
  68.     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)  
  69.     at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:167)  
  70.     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5423)  
  71.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)  
  72.     ... 6 more  
  73.   
  74. 一月 02, 2017 2:01:38 下午 org.apache.catalina.core.ContainerBase startInternal  
  75. 嚴重: A child container failed during start  
  76. java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]]  
  77.     at java.util.concurrent.FutureTask.report(FutureTask.java:122)  
  78.     at java.util.concurrent.FutureTask.get(FutureTask.java:192)  
  79.     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)  
  80.     at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)  
  81.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)  
  82.     at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)  
  83.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)  
  84.     at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)  
  85.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)  
  86.     at org.apache.catalina.startup.Tomcat.start(Tomcat.java:341)  
  87.     at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.startContainer(AbstractRunMojo.java:1238)  
  88.     at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.execute(AbstractRunMojo.java:592)  
  89.     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)  
  90.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)  
  91.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)  
  92.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)  
  93.     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)  
  94.     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)  
  95.     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)  
  96.     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)  
  97.     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)  
  98.     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)  
  99.     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)  
  100.     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)  
  101.     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)  
  102.     at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)  
  103.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  104.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  105.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  106.     at java.lang.reflect.Method.invoke(Method.java:498)  
  107.     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)  
  108.     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)  
  109.     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)  
  110.     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)  
  111. Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]]  
  112.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)  
  113.     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)  
  114.     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)  
  115.     at java.util.concurrent.FutureTask.run(FutureTask.java:266)  
  116.     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)  
  117.     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)  
  118.     at java.lang.Thread.run(Thread.java:745)  
  119. Caused by: org.apache.catalina.LifecycleException: A child container failed during start  
  120.     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)  
  121.     at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)  
  122.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)  
  123.     ... 6 more  
  124.   
  125. [INFO] ------------------------------------------------------------------------  
  126. [INFO] BUILD FAILURE  
  127. [INFO] ------------------------------------------------------------------------  
  128. [INFO] Total time: 3.132 s  
  129. [INFO] Finished at: 2017-01-02T14:01:38+08:00  
  130. [INFO] Final Memory: 20M/336M  
  131. [INFO] ------------------------------------------------------------------------  
  132. [ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:run (default-cli) on project shiro-test-spring: Could not start Tomcat: Failed to start component [StandardServer[-1]]: Failed to start component [StandardService[Tomcat]]: Failed to start component [StandardEngine[Tomcat]]: A child container failed during start -> [Help 1]  
  133. [ERROR]   
  134. [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.  
  135. [ERROR] Re-run Maven using the -X switch to enable full debug logging.  
  136. [ERROR]   
  137. [ERROR] For more information about the errors and possible solutions, please read the following articles:  
  138. [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException  
4、解決辦法如下:

[html] view plain copy
  1. <dependency>  
  2.     <groupId>javax.servlet</groupId>  
  3.     <artifactId>servlet-api</artifactId>  
  4.     <version>2.5</version>  
  5.     <strong><span style="color:#ff0000;"><scope>provided</scope></span></strong>  
  6. </dependency>  
5、在pom.xml引入的web(如上面的servlet-api)相關的依賴時,需要加入<scope>provided</scope>這個配置,意思是這個servlet-api的依賴包只在編譯和測試時使用而不在運行時使用;因爲web容器自身一般都會帶這些依賴包,故配置上scope。假如不配置此項,啓動tomcat時出現上述的異常,個人認爲是由於我們自己在pom.xml引入的依賴跟web容器自己的一些依賴包衝突導致。

6、再次使用上面的命令啓動tomcat,此時問題解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章