1. 개요
웹 애플리케이션 리소스 또는 웹 애플리케이션 아카이브는 일반적으로 WAR 파일이라고 합니다. WAR 파일은 애플리케이션 서버에서 Java EE 웹 애플리케이션을 배포하는 데 사용됩니다. WAR 파일 내에서 모든 웹 구성 요소는 하나의 단일 단위로 압축됩니다. 여기에는 JAR 파일, JavaServer Pages, Java 서블릿, Java 클래스 파일, XML 파일, HTML 파일 및 웹 애플리케이션에 필요한 기타 리소스 파일이 포함됩니다.
Maven 은 컴파일, 패키징 및 아티팩트 관리와 같은 빌드 작업을 처리하기 위해 Java EE 프로젝트에서 널리 사용되는 인기 있는 빌드 관리 도구입니다. Maven WAR 플러그인을 사용하여 프로젝트를 WAR 파일 로 빌드 할 수 있습니다 .
이 예제에서는 Java EE 애플리케이션과 함께 Maven WAR 플러그인의 사용을 고려할 것입니다. 이를 위해 간단한 Maven Spring Boot 웹 애플리케이션을 만들고 여기에서 WAR 파일을 생성합니다.
2. Spring Boot 웹 애플리케이션 설정
간단한 Maven, Spring Boot 및 Thymeleaf 웹 애플리케이션을 만들어 WAR 파일 생성 프로세스를 시연해 보겠습니다.
먼저 Spring Boot 웹 애플리케이션을 빌드하는 데 필요한 pom.xml 파일 에 의존성을 추가합니다 .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<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>
다음으로 MainController 클래스를 생성해 보겠습니다 . 이 클래스에서는 HTML 파일을 보기 위해 단일 GET 컨트롤러 메서드를 만들 것입니다 .
@Controller
public class MainController {
@GetMapping("/")
public String viewIndexPage(Model model) {
model.addAttribute("header", "Maven Generate War");
return "index";
}
}
마지막으로 index.html 파일을 만들 차례입니다 . 부트스트랩 CSS 파일도 프로젝트에 포함되어 있으며 일부 CSS 클래스는 index.html 파일에서 사용됩니다.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index</title>
<!-- Bootstrap core CSS -->
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">
Baeldung Tutorial
</a>
</div>
</nav>
<div class="container">
<h1>[[${header}]]</h1>
</div>
</body>
</html>
3. 메이븐 WAR 플러그인
Maven WAR 플러그인은 웹 애플리케이션의 모든 의존성, 클래스 및 리소스를 웹 애플리케이션 아카이브로 수집하고 컴파일하는 역할을 합니다.
Maven WAR 플러그인에는 몇 가지 정의된 목표가 있습니다.
- war : 프로젝트의 패키징 단계에서 호출되는 기본 목표입니다. 패키징 유형이 war 인 경우 WAR 파일을 빌드합니다 .
- exploded : 이 목표는 일반적으로 테스트 속도를 높이기 위해 프로젝트 개발 단계에서 사용됩니다. 지정된 디렉토리에 분해된 웹 앱을 생성합니다.
- inplace : 분해된 목표 의 변형입니다 . 웹 응용 프로그램 폴더 내에 분해된 웹 응용 프로그램을 생성합니다.
pom.xml 파일 에 Maven WAR 플러그인을 추가해 보겠습니다 .
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
이제 mvn install 명령을 실행하면 대상 폴더 내에 WAR 파일이 생성됩니다.
mvn:war:exploded 명령을 사용하여 폭발된 WAR을 대상 디렉토리 내부의 디렉토리로 생성할 수 있습니다. 이것은 일반 디렉토리이며 WAR 파일 내부의 모든 파일은 분해된 WAR 디렉토리 내부에 포함됩니다.
4. WAR 파일 콘텐츠 포함 또는 제외
Maven WAR 플러그인을 사용하여 WAR 파일의 내용을 필터링할 수 있습니다. WAR 파일 내에 additional_resources 폴더를 포함하도록 Maven WAR 플러그인을 구성해 보겠습니다 .
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<webResources>
<resource>
<directory>additional_resources</directory>
</resource>
</webResources>
</configuration>
</plugin>
mvn install 명령을 실행하면 additional_resources 폴더 아래의 모든 콘텐츠를 WAR 파일 내에서 사용할 수 있습니다. 예를 들어 보고서와 같은 일부 추가 리소스를 WAR 파일에 추가해야 할 때 유용합니다.
5. 매니페스트 파일 편집
Maven WAR 플러그인을 사용하면 매니페스트 파일을 사용자 정의할 수 있습니다. 예를 들어 매니페스트 파일 에 클래스 경로를 추가할 수 있습니다 . 이는 WAR 파일이 보다 복잡한 구조에 있고 여러 모듈 간에 프로젝트 의존성을 공유해야 할 때 매우 유용합니다.
매니페스트 파일 에 클래스 경로를 추가하도록 Maven WAR 플러그인을 구성해 보겠습니다 .
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
6. 결론
이 짧은 사용방법(예제)에서는 Maven 빌드 도구를 사용하여 WAR 파일을 생성하는 방법에 대해 설명했습니다. 작업을 시연하기 위해 Maven Spring Boot 웹 애플리케이션을 만들었습니다. WAR 파일을 생성하기 위해 Maven WAR 플러그인이라는 특수 플러그인을 사용했습니다.
전체 소스 코드 예제는 GitHub에서 사용할 수 있습니다 .