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에서 사용할 수 있습니다 .

res – Maven (eBook) (cat=Maven)