[SPRING] IDE를 사용하여 스프링 부트 메인을 실행한다.
SPRINGIDE를 사용하여 스프링 부트 메인을 실행한다.
스프링 - 부트 응용 프로그램이 필요합니다.
또한 IDE (Eclipse 또는 IntelliJ IDEA Community)에서이 응용 프로그램을 마우스 오른쪽 버튼으로 클릭하고 실행하여이 응용 프로그램을 실행할 수 있습니다.
여기에 내 pom.xml의 흥미로운 부분이 있습니다 (스프링 부트 - 스타터 - 부모 pom을 상속받지 않습니다).
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
...
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
여기 내 SpringBootServletInitializer가 있습니다 :
@Configuration
@EnableAutoConfiguration
@ComponentScan("com.company.theproject")
public class Application extends SpringBootServletInitializer
{
private static final Logger logger = LoggerFactory.getLogger(Application.class);
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
{
return application.sources(Application.class);
}
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
IDE에서 메인을 실행할 때 다음 오류가 발생합니다.
org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:183) ~[spring-boot-1.2.3.RELEASE.jar:1.2.3.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:156) ~[spring-boot-1.2.3.RELEASE.jar:1.2.3.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.2.3.RELEASE.jar:1.2.3.RELEASE]
... 12 common frames omitted
mvn spring-boot처럼 보입니다. main을 직접 실행할 때 발생하지 않는 더 많은 마법을 실행합니다.
spring-boot-startter-tomcat 의존성에서 제공된 스코프를 제거하면이 문제는 해결되지만 전쟁이 서블릿 컨테이너 내부에서 실행될 때 문제가 발생합니다.
현재 내가 발견 한 유일한 "수정"은 mvn spring-boot를 실행하는 것입니다 : 메인을 직접 실행하는 대신 IntelliJ IDEA 내에서 실행하십시오. 이것은 적절한 해결 방법이지만, 여전히 작동하지 않는 이유와 해결할 수있는 이유를 알고 싶습니다.
해결법
-
==============================
1.https://youtrack.jetbrains.com/issue/IDEA-107048과 관련이있을 수 있습니다.
https://youtrack.jetbrains.com/issue/IDEA-107048과 관련이있을 수 있습니다.
IntelliJ IDEA는 제공된 종속성을 CLASSPATH에 주입하지 않으며 Andy는 이것이 스프링이 임베디드 서블릿 컨테이너를 만들 수없는 이유라고 설명했습니다.
2005 년부터 다음과 같은 기능 요청이 있습니다. https://youtrack.jetbrains.com/issue/IDEABKL-99
주석에 언급 된 해결 방법은 필수 libs가있는 가짜 모듈을 클래스 경로로 사용하거나 -Xbootclasspath JVM 인수를 사용하거나 실행 (컴파일 된) vs 구축 (제공된)을 위해 사용자 정의 maven 프로파일을 사용하는 것입니다.
-
==============================
2.https://youtrack.jetbrains.com/issue/IDEA-140041에서 크게 영향을받은 해결 방법은 테스트 클래스 경로 (포함 된 서블릿 포함)로 기본 클래스를 시작하는 것입니다.
https://youtrack.jetbrains.com/issue/IDEA-140041에서 크게 영향을받은 해결 방법은 테스트 클래스 경로 (포함 된 서블릿 포함)로 기본 클래스를 시작하는 것입니다.
-
==============================
3.프로젝트 구조 -> 종속성 탭 아래에서 spring-boot-startter-tomcat 종속성의 범위를 "컴파일"로 변경하여이 작업을 수행 할 수있었습니다. 이것은 pom.xml에는 영향을 미치지 않지만 스프링 부트 실행 구성에서이 종속성을 사용할 수 있습니다
프로젝트 구조 -> 종속성 탭 아래에서 spring-boot-startter-tomcat 종속성의 범위를 "컴파일"로 변경하여이 작업을 수행 할 수있었습니다. 이것은 pom.xml에는 영향을 미치지 않지만 스프링 부트 실행 구성에서이 종속성을 사용할 수 있습니다
아이디어에서이 설정을 바꿀 위치에 대한 이미지는 여기를 클릭하십시오.
-
==============================
4.mvn spring-boot : run은 클래스 패스를 생성 할 때 제공되는 의존성을 포함합니다. IntelliJ IDEA는 그렇지 않습니다. 클래스 패스에 Tomcat이 없다면, Spring Boot는 당신이보고있는 예외를 일으키는 내장 된 서블릿 컨테이너를 생성 할 수 없다. 아마도 이것은 IntelliJ의 버그입니다. 의존성을 제공 할 컨테이너가 없다면 실제로 클래스 경로에 있어야합니다.
mvn spring-boot : run은 클래스 패스를 생성 할 때 제공되는 의존성을 포함합니다. IntelliJ IDEA는 그렇지 않습니다. 클래스 패스에 Tomcat이 없다면, Spring Boot는 당신이보고있는 예외를 일으키는 내장 된 서블릿 컨테이너를 생성 할 수 없다. 아마도 이것은 IntelliJ의 버그입니다. 의존성을 제공 할 컨테이너가 없다면 실제로 클래스 경로에 있어야합니다.
IntelliJ가 main-method를 실행하여 spring-boot-startter-tomcat 종속성을 포함 할 때 사용하는 기본 클래스 경로를 재정 의하여 문제를 해결할 수 있습니다.
-
==============================
5.이 페이지를 찾고 maven 프로파일을 사용하여 프로파일을 관리합니다.
이 페이지를 찾고 maven 프로파일을 사용하여 프로파일을 관리합니다.
<profiles> <profile> <id>PROD</id> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> </dependencies> </profile> <profile> <id>DEV</id> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>TEST</scope> </dependency> </dependencies> </profile> </profiles>
설정 전에 주 클래스를 설정하고, 명령을 설정하십시오.
mvn clean compile -Pdev
-
==============================
6.필자는 제공된 libaray (spring-boot-starter-tomcat)를 프로젝트 구성에 추가하여 Intellij IDEA 2017.2에서이 문제를 해결할 수있었습니다.
필자는 제공된 libaray (spring-boot-starter-tomcat)를 프로젝트 구성에 추가하여 Intellij IDEA 2017.2에서이 문제를 해결할 수있었습니다.
파일 -> 프로젝트 구조를 선택하십시오. 라이브러리를 선택하고 새 프로젝트 라이브러리를 추가하십시오 (type = From Maven ...). 대화 상자를 사용하여 spring-boot-starter-tomcat을 검색하고 올바른 버전을 선택하고 확인을 클릭하여 추가하십시오. 라이브러리가 외부 라이브러리 목록에 추가됩니다.
단점은 스프링 부트 버전이 변경된 경우이 라이브러리를 삭제하고 새 버전을 추가해야한다는 점입니다.
-
==============================
7.아래의 프로필과 지침을 사용하여 다른 환경의 내용을 변경하지 않고 IntelliJ에서 개발할 수있는 프로필을 maven에 추가 할 수 있습니다.
아래의 프로필과 지침을 사용하여 다른 환경의 내용을 변경하지 않고 IntelliJ에서 개발할 수있는 프로필을 maven에 추가 할 수 있습니다.
<!-- Leave original dependency as-is --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> </dependencies> <profiles> <!-- Enable this profile to run in IntelliJ. IntelliJ excludes provided dependencies from compile by default. --> <profile> <id>intellij</id> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>compile</scope> </dependency> </dependencies> </profile> </profiles>
IntelliJ의 오른쪽에있는 Maven Projects 버튼을 클릭하고 Profiles에서 intellij를 선택하십시오.
-
==============================
8.IntelliJ 2018을 사용하여 동일한 문제가 발생했습니다. 제 해결책은 다음과 같습니다.
IntelliJ 2018을 사용하여 동일한 문제가 발생했습니다. 제 해결책은 다음과 같습니다.
-
==============================
9.이 차례를 따라라:
이 차례를 따라라:
from https://stackoverflow.com/questions/30237768/run-spring-boots-main-using-ide by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] XML 스키마 네임 스페이스 용 Spring NamespaceHandler를 찾을 수 없음 [http://www.springframework.org/schema/batch] (0) | 2018.12.14 |
---|---|
[SPRING] Spring 부트가 서블릿 필터를 등록하지 못하게한다. (0) | 2018.12.14 |
[SPRING] Spring에서 예약 된 작업을 조건부로 활성화 또는 비활성화하는 방법은 무엇입니까? (0) | 2018.12.14 |
[SPRING] 봄 부팅 및 SQLite (0) | 2018.12.14 |
[SPRING] JSON을 사용하여 중첩 된 객체를 Spring MVC 컨트롤러에 게시 (0) | 2018.12.14 |