Spring 프로젝트를 통해 개발하면서 개발/테스트/릴리즈를 통해 여러 개의 WAR를 만들어야 할 때가 있습니다. 또한 각각의 WAR은 데이터베이스 접속도 별도로 설정해야 합니다. 하지만 기본적으로 생성되는 Maven의 pom.xml은 단일한 WAR만 만들 수 있습니다.
이번 포스트에서는 단일한 프로젝트에서 여러 개의 WAR를 만드는 방법에 대해서 설명합니다. 아래 글에서는 개발/릴리즈를 구분하여 WAR를 만드는 방법입니다.
pom.xml 수정하기
profile 추가하기
<project> 아래에 <profiles>를 생성하고 <profile>을 아래와 같이 2개 생성합니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
...... 중간 생략 ......
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.lib.path>${project.basedir}/src/main/webapp/WEB-INF/lib</project.lib.path>
...... 중간 생략 ......
</properties>
<profiles>
<profile>
<id>env-develop</id>
<activation>
<property>
<name>env</name>
<value>develop</value>
</property>
</activation>
<properties>
<war-filename>develop</war-filename>
</properties>
</profile>
<profile>
<id>env-release</id>
<activation>
<property>
<name>env</name>
<value>release</value>
</property>
</activation>
<properties>
<war-filename>release</war-filename>
</properties>
</profile>
</profiles>
...... 이하 생략 ......
war 파일 이름 변경하기
<build> 노드의 <finalName>에 profile에서 설정한 속성값을 참조하도록 다음과 같이 설정합니다. 아래와 같이 설정하면 빌드 시에 develop.war, release.war로 각각 생성됩니다.
...... 상단 생략 ......
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${war-filename}</finalName>
...... 이하 생략 ......
web.xml 파일 경로 설정하기
참조하는 web.xml 경로를 <profile> 값을 참조할 수 있도록 설정합니다. 프로젝트에서는 이미 개발/릴리즈에 해당하는 web.xml이 각각 존재하고 있으며 각각 다른 spring의 다른 context.xml을 참조하도록 설정된 상태입니다.
...... 상단 생략 ......
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<webXml>src/main/webapp/WEB-INF/${env}/web.xml</webXml>
</configuration>
</plugin>
...... 이하 생략 ......
본 포스트에서는 위 방법을 사용하였지만 빌드 시에 설정파일을 복사하여 사용하는 방법으로도 설정할 수 있습니다.
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>copy-files</id>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target name="copy files">
<copy
file="${project.build.sourceDirectory}/pkg/ApplicationBuilderFactory.java.${extension}"
tofile="${project.build.sourceDirectory}/pkg/ApplicationBuilderFactory.java"
/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
프로젝트 빌드하기
프로젝트를 선택하고 Maven > Select Maven Profiles를 선택합니다.
다이얼 로그 창에서 하나의 프로파일을 선택합니다. 여러 개의 파일을 만든다고 2개를 선택하면 정상적으로 동작하지 않습니다. 하나의 프로파일만 선택하고 빌드해야 합니다.
프로젝트 > Run As > Maven Install 을 선택하여 WAR로 빌드합니다.
빌드 자동화 하기
위에서 설명한 방법은 프로파일을 선택하고 빌드해야 하여 약간은 귀찮은 작업이 됩니다. 아래의 방법은 보드 쉽게 각각의 빌드를 설정하는 방법입니다.
Run Configurations... 을 선택하고 Maven Build를 선택합니다. 이미 존재하는 설정을 복사하여 develop/release로 각각 생성합니다. 복사한 설정의 Parameter에 개발은 env=develop, 릴리즈는 env=release를 합니다. 이때 설정하는 값은 <profile> 노드에서 설정한 <activation><property>의 이름=값과 일치되어야 합니다.
개발 빌드 설정하기
릴리즈 빌드 설정하기
각각의 Run을 수행하여 정상적으로 빌드되는지 확인합니다.
글을 마치며
이상으로 단일 Maven 프로젝트에서 여러 개의 빌드를 수행하는 방법에 대해서 설명하였습니다. 읽는 분에 도움이 되었으면 좋겠습니다. 감사합니다.
참고자료
stackoverflow.com/questions/1882322/how-do-i-get-maven-2-to-build-2-separate-war-files
'Tips, Tricks > Java, Spring Framework' 카테고리의 다른 글
Parsing EML files in Java(자바에서 EML 파일 파싱하기) (0) | 2021.01.06 |
---|---|
Using a FilenameFilter in Java(자바에서 FilenameFilter 사용하기) (0) | 2021.01.06 |
Find links from a web page(웹페이지에서 링크 찾기) (0) | 2020.12.10 |
Create a File Hash in Java(자바로 파일 해쉬 만들기) (0) | 2020.11.13 |
Converting Java ImageIO.write to ImageWriter(Java ImageIO.write를 ImageWriter로 전환하기) (0) | 2020.11.09 |