본문으로 바로가기

728x90

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

728x90