programing

IDE를 사용하여 스프링 부트 메인 실행

newnotes 2023. 3. 16. 21:50
반응형

IDE를 사용하여 스프링 부트 메인 실행

다음 작업을 수행해야 하는 스프링 부트 응용 프로그램이 있습니다.

  • 서블릿 컨테이너에 전쟁용으로 배치 가능
  • 'mvn spring-boot:run'을 통해 실행 가능

(Eclipse 는 IntelliJ IDEA Community)를 하여 IDE 또는 Community)에서 이 을 실행할 에서 이 애플리케이션을 실행할 수도 있습니다.main리고실실 실실실다다

다음은 my pom.xml의 흥미로운 부분입니다(나는 spring-boot-starter-parent 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:run는, 하지 않는 더합니다.main직접적으로.

의 삭제providedspring-boot-starter-tomcat종속성은 이 문제를 해결하지만 전쟁이 서블릿 컨테이너 내에서 실행될 경우 문제를 일으킵니다.

은 '수정'을 실행하는 이다.mvn spring-boot:run인텔리J IDEA에서 메인 기능을 직접 실행하는 대신 사용할 수 있습니다.이것은 적절한 회피책이지만, 저는 이것이 왜 작동하지 않는지, 그리고 수정할 수 있는지 알고 싶습니다.

https://youtrack.jetbrains.com/issue/IDEA-140041에서 강하게 영감을 받은 회피책은 메인 클래스를 테스트클래스 패스(임베디드 서블릿 포함)로 시작하는 것입니다.

순서(IntelliJ 16):

  1. Run->Edit Configurations->Add new configuration -> ★★Applicationdiscloss.discloss.
  2. ★★Main class로로 합니다.<your.main.class>
  3. ★★Use classpath of module로로 합니다.<*>_test( 트트))))))!)
  4. Ok ★★★★★★★★★★★★★★★★★」Run그거야!

https://youtrack.jetbrains.com/issue/IDEA-107048과 관련이 있을 수 있습니다.

는 IntelliJ IDEA를 .providedCLASSPATH에 의존하며 Andy가 말했듯이 스프링이 임베디드 서블릿 컨테이너를 만들 수 없는 이유입니다.

2005년부터 이 기능에 대한 요구가 있었습니다.https://youtrack.jetbrains.com/issue/IDEABKL-99

되어 있는 패스로서 하는 것, JVM 하는 것, 하는 것 등이 .compiled ) 빌딩 ( )vs ( ( ( )provided

IntelliJ 2018에서도 같은 문제가 있었습니다.처음에 인텔리J에 봄 프로젝트용 maven 라이브러리를 추가했는지 확인합니다.

솔루션은 다음과 같습니다.

  1. ★★★★★★★★★★★★★★★로 이동Run->Edit Configurations.

  2. 선택합니다.Application&quot;&quot;

  3. 마크를 켜주세요.Include dependencies with "Provided" scope.

  4. OK->RUN

Project structure -> Dependencies 탭에서 spring-boot-starter-tomcat 의존관계 범위를 compile로 변경하여 이 작업을 수행할 수 있었습니다.이로 인해 pom.xml에는 영향을 주지 않지만 이 의존관계를 스프링 부트 실행 구성에서 사용할 수 있습니다.

이 설정을 변경하는 방법에 대한 이미지를 보려면 여기를 클릭하십시오.

mvn spring-boot:run포함한다provided클래스 경로를 만들 때 종속성이 있습니다.그것은 인터리 JE 아이디어처럼 들리네요.클래스 경로에서 Tomcats가 없으면 스프링 부팅의 컨테이너를 생성할 수 없습니다.의심할 여지 없이, 이는 종속성을 제공하기 위해 컨테이너가 없다면 클래스 경로 경로 경로를 제공해야 합니다.

메인 방법을 실행하는 기본 클래스 경로를 재정의함으로써 문제를 해결할 수 있습니다.spring-boot-starter-tomcat의존.

페이지를 찾아서 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>

메인 클래스를 구성합니다.beforeLanuce명령을 설정합니다.

mvn clean compile -Pdev

제공된 libaray(spring-boot-starter-tomcat)를 프로젝트 구성에 추가함으로써 Intelij IDEA 2017.2에서 이 문제를 해결할 수 있었습니다.

[파일] -> [프로젝트 구조]를 선택합니다.Libraries(라이브러리)를 선택하고 새 프로젝트 라이브러리(타입 = From Maven...)를 추가합니다.대화상자를 사용하여 spring-boot-starter-tomcat을 검색하고 올바른 버전을 선택한 후 OK를 클릭하여 추가합니다.라이브러리가 외부 라이브러리 목록에 추가됩니다.

단점은 Spring Boot 버전이 변경된 경우 이 라이브러리를 삭제하고 새 버전을 추가해야 한다는 것입니다.

이하의 프로파일과 순서를 사용하면, 다른 환경에 맞추어 변경하지 않고 인텔리J 로 개발을 가능하게 하는 프로파일을 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>

Internet ExplorerJ를 마우스 오른쪽 버튼으로 클릭하고 프로파일 아래에 있는 프로젝트 버튼을 클릭합니다.intellij.

이 단계를 따르십시오.

  1. 오른쪽 상단 오른쪽 오른쪽 왼쪽에서 드롭다운 구성을 클릭하고 편집 구성을 선택하고 새 창을 열고 새 창이 열립니다.

  2. 이 창에서 "+" 버튼을 클릭하고 스프레드쉬트를 선택하고 스프레드 부팅을 선택합니다.

여기에 이미지 설명 입력

  1. 그러면 메인 클래스를 추가하고 화면 핫에 표시된 다른 세부 정보를 추가합니다.여기에 이미지 설명 입력

  2. 이제 응용 프로그램을 실행합니다.

언급URL: https://stackoverflow.com/questions/30237768/run-spring-boots-main-using-ide

반응형