Discuss / Java / 使用内置tomcat启动idea创建的项目失败了

使用内置tomcat启动idea创建的项目失败了

Topic source

bug项目地址:https://github.com/MakeItAlright/mvc_app/tree/master

AppConfig 启动类

38.   Tomcat tomcat = new Tomcat();      tomcat.setPort(Integer.getInteger("port", 8080));      tomcat.getConnector();      Context ctx = tomcat.addWebapp("", new File("web").getAbsolutePath());      WebResourceRoot resources = new StandardRoot(ctx);43.   resources.addPreResources(            new DirResourceSet(resources, "/WEB-INF/classes", new File("target/classes").getAbsolutePath(), "/"));      ctx.setResources(resources);46.   tomcat.start();      tomcat.getServer().await();

错误信息

严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	at com.itranswarp.learnjava.AppConfig.main(AppConfig.java:46)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	... 16 more
Caused by: java.lang.NoSuchMethodError: 'java.lang.ClassLoader javax.servlet.ServletContext.getClassLoader()'
	... 22 more

11月 08, 2020 8:52:12 上午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: A child container failed during start
	at com.itranswarp.learnjava.AppConfig.main(AppConfig.java:46)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	... 8 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	... 16 more

Process finished with exit code 1

项目tree

mvc_app
│      
├─src
│  ├─main
│  │  ├─java
│  │  │  └─com
│  │  │      └─itranswarp
│  │  │          └─learnjava
│  │  │              │  AppConfig.java
│  │  │              │  DatabaseInitializer.java
│  │  │              │  
│  │  │              ├─entity
│  │  │              │      User.java
│  │  │              │      
│  │  │              ├─service
│  │  │              │      UserService.java
│  │  │              │      
│  │  │              └─web
│  │  │                      UserController.java
│  │  │                      
│  │  └─resources
│  │      │  jdbc.properties
│  │      │  logback.xml
│  │      │  
│  │      └─static
│  └─test
│      └─java
├─target
│  ├─classes
│  │  │  jdbc.properties
│  │  │  logback.xml
│  │  │  
│  │  ├─com
│  │  │  └─itranswarp
│  │  │      └─learnjava
│  │  │          │  AppConfig$1.class
│  │  │          │  AppConfig.class
│  │  │          │  DatabaseInitializer.class
│  │  │          │  
│  │  │          ├─entity
│  │  │          │      User.class
│  │  │          │      
│  │  │          ├─service
│  │  │          │      UserService.class
│  │  │          │      
│  │  │          └─web
│  │  │                  UserController.class
│  │  │                  
│  │  └─META-INF
│  │          mvc_app.kotlin_module
│  │          
│  └─test-classes
├─tomcat.8080
│  └─work
│      └─Tomcat
│          └─localhost
│              └─ROOT
└─web
    │  index.jsp
    │  
    └─WEB-INF
        │  web.xml
        │  
        └─templates
                index.html
                profile.html
                register.html
                signin.html
                _base.html
                

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"         version="4.0">    <servlet>        <servlet-name>dispatcher</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextClass</param-name>            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>        </init-param>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>com.itranswarp.learnjava.AppConfig</param-value>        </init-param>        <load-on-startup>0</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>dispatcher</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping></web-app>

完整错误信息

严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486)
	at com.itranswarp.learnjava.AppConfig.main(AppConfig.java:46)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
	... 16 more
Caused by: java.lang.NoSuchMethodError: 'java.lang.ClassLoader javax.servlet.ServletContext.getClassLoader()'
	at org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath(StandardJarScanner.java:250)
	at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:233)
	at org.apache.catalina.startup.ContextConfig.processJarsForWebFragments(ContextConfig.java:2137)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1288)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:985)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:303)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5082)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	... 22 more

11月 08, 2020 8:52:12 上午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: A child container failed during start
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486)
	at com.itranswarp.learnjava.AppConfig.main(AppConfig.java:46)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:928)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
	... 8 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	... 16 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
	... 16 more
Caused by: java.lang.NoSuchMethodError: 'java.lang.ClassLoader javax.servlet.ServletContext.getClassLoader()'
	at org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath(StandardJarScanner.java:250)
	at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:233)
	at org.apache.catalina.startup.ContextConfig.processJarsForWebFragments(ContextConfig.java:2137)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1288)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:985)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:303)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5082)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	... 22 more

Exception in thread "main" org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:928)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.startup.Tomcat.start(Tomcat.java:486)
	at com.itranswarp.learnjava.AppConfig.main(AppConfig.java:46)
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: A child container failed during start
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	... 8 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:928)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
	... 8 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	... 16 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
	at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
	... 16 more
Caused by: java.lang.NoSuchMethodError: 'java.lang.ClassLoader javax.servlet.ServletContext.getClassLoader()'
	at org.apache.tomcat.util.scan.StandardJarScanner.doScanClassPath(StandardJarScanner.java:250)
	at org.apache.tomcat.util.scan.StandardJarScanner.scan(StandardJarScanner.java:233)
	at org.apache.catalina.startup.ContextConfig.processJarsForWebFragments(ContextConfig.java:2137)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1288)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:985)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:303)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5082)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	... 22 more

Process finished with exit code 1

AppConfig 启动类

Tomcat tomcat = new Tomcat();tomcat.setPort(Integer.getInteger("port", 8080));tomcat.getConnector();Context ctx = tomcat.addWebapp("", new File("web").getAbsolutePath());WebResourceRoot resources = new StandardRoot(ctx);resources.addPreResources(        new DirResourceSet(resources, "/WEB-INF/classes", new File("target/classes").getAbsolutePath(), "/"));ctx.setResources(resources);tomcat.start(); //Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]] at (AppConfig.java:46)tomcat.getServer().await();

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"         version="4.0">    <servlet>        <servlet-name>dispatcher</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextClass</param-name>            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>        </init-param>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>com.itranswarp.learnjava.AppConfig</param-value>        </init-param>        <load-on-startup>0</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>dispatcher</servlet-name>        <url-pattern>/*</url-pattern>    </servlet-mapping></web-app>

再次调整格式

AppConfig 启动类

Tomcat tomcat = new Tomcat();
tomcat.setPort(Integer.getInteger("port", 8080));
tomcat.getConnector();
Context ctx = tomcat.addWebapp("", new File("web").getAbsolutePath());
WebResourceRoot resources = new StandardRoot(ctx);resources.addPreResources(
        new DirResourceSet(resources, "/WEB-INF/classes", new File("target/classes").getAbsolutePath(), "/"));
ctx.setResources(resources);tomcat.start(); //Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]] at (AppConfig.java:46)
tomcat.getServer().await();

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

你的tomcat版本不对,要用maven定义的tomcat版本,不要自己加额外的lib到classpath


  • 1

Reply