无法在 IntelliJ Idea 中启动 spring-boot 应用程序

Posted

技术标签:

【中文标题】无法在 IntelliJ Idea 中启动 spring-boot 应用程序【英文标题】:Unable to start spring-boot application in IntelliJ Idea 【发布时间】:2016-12-28 02:52:27 【问题描述】:

概述

我可以使用 spring-boot 的 maven 插件运行应用程序,但不能使用 IDE 运行它。以下几行详细介绍了我的程序。

应用类如下:

package com.blss.retailServices.dataExportRouter;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude =  VelocityAutoConfiguration.class )
public class DataExportRouterApplication 
    public static void main(String[] args) throws Exception 
        SpringApplication.run(DataExportRouterApplication.class, args);
    

异常堆栈跟踪如下:

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at com.blss.retailServices.dataExportRouter.DataExportRouterApplication.main(DataExportRouterApplication.java:14) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_74]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_74]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_74]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_74]
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) [idea_rt.jar:na]
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    ... 13 common frames omitted

我使用了@SpringbootApplication,但无济于事。

问题

如果有人能帮我解决这个问题,我将不胜感激。

【问题讨论】:

你能显示你的 pom.xml 吗? 【参考方案1】:

我猜您有一个使用 Maven 的 war 打包项目,并且您已将您的 servlet 引擎 (tomcat) 标记为提供。

很遗憾,IntellIJ IDEA 不支持add provided dependencies in the runtime classpath,这就是为什么当您从 IDE 运行项目时无法运行的原因。

2019 年 7 月 30 日更新

根据乔治:

他们在应用程序运行配置中添加了一个复选框 "包含具有 'Provided' 范围的依赖项"

【讨论】:

非常感谢。那正是我的问题。我更改了“spring-boot-starter-tomcat”依赖范围进行编译,它运行正常。 他们在应用程序运行配置中添加了一个复选框以“包含具有‘提供’范围的依赖项” @Giorgio 你能告诉我你在哪个版本的 IntelliJ 中看到了这个选项吗? @Ena 我正在使用:IntelliJ IDEA 2018.1.1(社区版)构建 #IC-181.4445.78,构建于 2018 年 4 月 10 日 JRE:1.8.0_152-release-1136-b27 x86_64 JVM : OpenJDK 64-Bit Server VM by JetBrains sro macOS 10.13.4 谢谢,这也解决了我在 Ubuntu 20.04 上的问题,IntelliJ IDEA 2020.2 EAP (Community Edition) Build #IC-202.5792.28,建于 2020 年 6 月 18 日运行时版本:11.0.7+10- b944.12 amd64 VM:JetBrains sro 的 OpenJDK 64 位服务器 VM Linux 5.4.0-37-generic GC:ParNew、ConcurrentMarkSweep 内存:725M 内核:8 个非捆绑插件:com.intellij.plugins.watcher 当前桌面:ubuntu:GNOME

以上是关于无法在 IntelliJ Idea 中启动 spring-boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA启动Tomcat后,却无法访问Tomcat主页

intellij idea 无法启动或调试 spring-boot

intellij idea无法启动项目, 按钮是灰色的

Spring Boot无法使用intellij idea启动应用程序

IntelliJ idea 无法识别web项目,导致项目启动失败

无法在 intellij idea 中使用 gradle 构建 javafx 项目