codememo

spring boot war(tomcat 포함 안 함)

tipmemo 2023. 2. 16. 21:45
반응형

spring boot war(tomcat 포함 안 함)

maven이 내장된 Tomcat을 사용하지 않고 war 파일을 만들고 싶습니다.여기 내 폼의 관련 부분이 있다.

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.6.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- Add tomcat only if I want to run directly -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
...

mvn 패키지를 실행하면 tomcat*.jar가 제공 lib 폴더 내에 있지만 lib 폴더 내에 있는 전쟁이 발생합니다.빌드-툴-플러그인-매븐 패키징을 읽었는데 뭐가 잘못됐는지 모르겠어요.

주요 아이디어는 애플리케이션을 애플리케이션으로 실행하는 것입니다.고객이 애플리케이션 서버에 도입하는 방법을 알고 있습니다.

M의 힌트를 따르세요.Deinum I은 Tomcat-dependency를 제외했다.

다음 pom.xml(관련 스니펫)을 사용하여maven clean package원하는 결과를 얻을 수 있습니다.

...
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.6.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- Add tomcat only if I want to run directly -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
...

idea-user 경고:실행 구성에서 "제공된 범위에 종속성 포함"을 활성화해야 합니다(자세한 내용은 IntelliJ Idea에서 스프링 부트 응용 프로그램을 시작할 수 없음 참조).

이것이 스프링 부트 방식인지 아닌지는 잘 모르겠지만 tomcomcat jars를 사용하여 제외할 수 있습니다.maven-war-plugin배열.즉, 다음 항목을 pom.xml에 추가합니다.

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <packagingExcludes>WEB-INF/lib/tomcat-*.jar</packagingExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

이 방법을 사용하면 생성된 전쟁은 실행할 수 없습니다(java -jar를 사용하여 명령줄에서 실행할 수 없습니다).단, 임의의 서블릿컨테이너에만 전개할 수 있습니다.

저도 같은 필요성을 느꼈지만 언급한 종속성을 제거하지 못했습니다.이것을 추가하여 WAR 파일을 얻을 수 있었습니다.<packaging>war</packaging>내 폼 파일에 의존해

봄기사를 참고해서...공유하기 때문에 다른 사람에게도 도움이 될 수 있습니다.

에서의 스프링 부트스타터 의존관계 변경

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

여기에는 내장된 Tomcat 서버가 제외됩니다.

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

임베디드 Tomcat 없이 기존 Spring Boot 프로젝트에서 최종 WAR을 구축하는 가장 쉬운 방법은 다음과 같습니다.

1) 아티팩트의 WARPackaging을 설정합니다.<packaging>war</packaging>

2) 다음을 제공하도록 Tomcat Server 종속성을 설정합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

기존 스프링 부트 의존 관계 중 일부가 기본적으로 포함되어 있는 경우 제외합니다.예:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
</dependency>

바로 그거야.

언급URL : https://stackoverflow.com/questions/25991789/spring-boot-war-without-tomcat-embedded

반응형