springboot의 기본 패키징 방식은 jar 패키지입니다. jar 패키지의 장점은 구성을 변경할 필요가 없고 tomcat이 내장되어 있다는 점입니다. jar 패키지로 패키징하면 바로 docker에 던져서 실행할 수 있습니다. 테스트. 하지만 프런트엔드 코드는 war 패키지로만 패키징할 수 있다는 점을 고려하면 백엔드 코드를 war 패키지로 패키징하고 tomcat 컨테이너의 webapps에서 프런트엔드 코드와 함께 실행하면 충분합니다.
SpringBoot 패키징 형태
생성된 SpringBoot 프로젝트는 기본적으로 jar 패키지 형태로 패키징됩니다. 동시에 Tomcat 컨테이너가 내장되어 있습니다.
그렇다면 springboot를 war 패키지로 패키징하여 wildfly와 같은 컨테이너에 배포하려면 어떻게 해야 할까요?
다음은 프로젝트 생성부터 시작되는 각 단계를 설명합니다.
프로젝트 만들기
아이디어 도구를 사용하여 간단한 Maven 프로젝트를 생성하면 됩니다. 수정하세요.
pom.xml 구성 수정
프로젝트 생성 후 pom.xml 파일을 수정하고 상위 태그를 추가합니다.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath/> </parent>
원래 springboot 프로젝트였다면 이미 포함되어 있으므로 수정할 필요가 없습니다.
pom.xml의 패키징 방법을 war로 설정하세요.
<packaging>war</packaging>
다음과 같이 종속성 구성을 추가하거나 수정합니다.
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </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> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
그 중 tomcat 종속성을 spring-boot-starter-web에서 제외해야 합니다. 동시에 servlet-api의 종속성을 추가합니다. 여기에 추가된 종속성은 Servlet2.5입니다.
패키징을 위해 빌드에서 다음 플러그인을 사용하세요.
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
메인 메소드 시작
시작할 메인 메소드가 이미 있는 경우 메인 메소드가 SpringBootServletInitializer를 상속하고 해당 메소드를 구현하도록 합니다. 새로 생성된 프로젝트라면 최상위 디렉터리에 직접 SpringBootApp(스타트업 클래스)를 생성한 뒤, 다음과 같이 diam을 시작한다.
@SpringBootApplication public class SpringBootApp extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(SpringBootApp.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(SpringBootApp.class); } }
Packaging
maven 명령을 통해 패키지 패키징을 실행하기만 하면 대상 디렉터리에 war 패키지가 생성됩니다.
Tomcat 및 wildfly 배포는 해당 디렉터리에 war 패키지를 배치하고 서비스를 시작하면 됩니다.
예외
시작 중에 다음과 유사한 예외가 발생하는 경우(web.xml이 누락되었음을 나타냄):
WAR 조립 오류: webxml 속성이 필요합니다(또는 다음과 같은 경우 기존 WEB-INF/web.xml이 필요함). 업데이트 모드에서 실행 중)
pom 파일 패키징 플러그인을 확인하고 tomcat 문제가 해결되었는지 주의 깊게 살펴보고 위의 패키징 플러그인이 올바른지 확인하세요.
문제의 원인은 종속성 패키지 spring-boot-starter-web이 springboot 프로젝트에서 참조된다는 것입니다. 이 패키지에 참조된 spring-boot-starter-tomcat에는 tomcat 내장 서블릿 컨테이너가 포함되어 있으며, 해당 버전마다 서로 다른 서블릿 버전 사양을 구현합니다.
Servlet/JSP 버전 2.5/2.1은 Tomcat 버전 6.0.x를 지원하며 최소 Java 버전은 1.5입니다. Servlet/JSP 버전 3.0/2.2는 Tomcat 버전 7.0.x를 지원하며 최소 Java 버전은 1.6입니다.
위에서 Servlet2.5를 사용하기 때문에 web.xml 파일이 없을 경우 위의 예외가 발생합니다.
해결 방법 1: 서블릿 버전이 3 미만인 경우 /src/main/webapp/WEB-INF/web.xml 파일을 만듭니다.
해결책 2: pom.xml 빌드 아래에 maven-war-plugin 플러그인을 추가합니다. 그리고 failOnMissingWebXml을 false로 설정합니다.
위 내용은 Tomcat이나 wildfly에서 실행하기 위해 SpringBoot를 war 패키지로 패키징하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!