민서네집

[maven] pom.xml profile 설정 본문

Java

[maven] pom.xml profile 설정

브라이언7 2013. 8. 15. 02:16

maven의 profile 기능을 이용해서 로컬/개발 서버 구분을 해 보았다.


그런데 이렇게 설정하니 한가지 문제가 있다.


default 를 local profile 로 지정했는데, maven 으로 실행시키는 경우가 아니라 이클립스 안에서 Servers 탭으로 실행시키는 경우에, maven 으로 실행시킨 다음에 이클립스 안에서 서버를 시작하면 로컬 환경임에도 개발 서버(dev) profile 이 적용된다는 점이다.


나 혼자 war로 패키징해서 올리고 다른 사람들이 dev 로 package 해서 올릴 일이 없다면 이렇게 해도 되겠지만, 여러 사람이 maven 으로 packaging 을 할 수 있다면 로컬에서 이클립스로 실행시킬때 profile 이 바뀌어서 문제가 생길 수도 있다.


이럴 경우는 default로 local 용 파일을 넣어놓고, war로 패키징할때 server 용으로 만든 파일을 덮어씌우는 방법을 사용하는 것이 더 나을것 같다.

이렇게 하면 maven 으로 실행시킬 때도 profile 과는 상관없이 항상 local 용 파일이 실행되고, war 로 만들어질 때만 profile 설정에 따라 개발 서버용(dev) profile 을 적용시킬 수 있다.


일단 첫번째 설정을 하려면 다음과 같다.






<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>sample</groupId> <artifactId>sample-project</artifactId> <version>0.0.1-SNAPSHOT</version> <repositories> <repository> <id>sonatype-nexus-snapshots</id> <name>Sonatype Nexus Snapshots</name> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>jboss</id> <url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url> <releases> <enabled>true</enabled> </releases> </repository> <repository> <id>mesir-repo</id> <url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url> </repository> </repositories> <properties> <mysql.version>5.1.21</mysql.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.1.2.RELEASE</spring.version> <thymeleaf.version>2.0.11</thymeleaf.version> <!-- commons depedencies --> <commons.codec.version>1.5</commons.codec.version> <commons.lang.version>2.5</commons.lang.version> <commons.digester.version>2.0</commons.digester.version> <commons.beanutils.version>1.8.3</commons.beanutils.version> <commons.collections.version>3.2.1</commons.collections.version> <commons.dbcp.version>1.4</commons.dbcp.version> <commons.fileupload.version>1.2.2</commons.fileupload.version> <commons.io.version>1.4</commons.io.version> </properties> <build> <finalName>ROOT</finalName> <filters> <filter>src/main/profiles/${deployTarget}/filters/config/config.properties</filter> </filters> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <!-- includes 에 지정된 파일들을 위의 filters 에 지정된 필터파일의 데이터로 치환하여 deploy 위치로 복사 --> <resource> <filtering>true</filtering> <directory>src/main/resources</directory> <includes> <include>config/config.properties</include> </includes> </resource> <!-- excludes 에 지정된 파일들을 제외한 파일들을 deploy 위치로 복사 --> <!-- <resource> <directory>src/main/resources</directory> <excludes> <exclude>config/config.properties</exclude> </excludes> </resource> --> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin>

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.5</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin>

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>1.1</version> <configuration> <path>/</path> <port>8080</port> <url>http://xxx.xxx.xxx.xxx:8080/manager/text</url> <username>sampleDeploy</username> <password>password</password> <charset>UTF-8</charset> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>local</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <!-- resource 필터 사용시 개발자 PC에 적용되는 필터 properties 의 폴더 위치 --> <deployTarget>local</deployTarget> </properties> </profile> <profile> <id>dev</id> <properties> <!-- resource 필터 사용시 개발서버에 적용되는 필터 properties 의 폴더 위치 --> <deployTarget>dev</deployTarget> </properties> </profile> </profiles> <dependencies>         <!-- 생략 --> </dependencies> <packaging>war</packaging> </project>


* src/main/resources/config/config.properties 의 내용은 다음과 같다.


fileUpload.path=${fileUpload.path}


* src/main/profiles/dev/filters/config/config.properties 의 내용은 다음과 같다.


fileUpload.path=/data/apache-tomcat-7.0.30/webapps/fileupload


* src/main/profiles/local/filters/config/config.properties 의 내용은 다음과 같다.


fileUpload.path=D:/workspace/sample-project/src/main/webapp/fileupload


< profile filtering 에 대한 설명 >


http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html


두번째 방법의 설정은 다음과 같다.


pom.xml 파일에서 filters 설정을 빼고, maven-war-plugin 설정을 다음과 같이 추가한다.


src/main/profiles/local, src/main/profiles/dev 밑에 filters 디렉터리를 삭제하고 바로 config 디렉터리를 두었음.




<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-war-plugin</artifactId>
	<version>2.1.1</version>
	<configuration>
		<webResources>
			<resource>
				<directory>src/main/profiles/${deployTarget}</directory>
				<targetPath>WEB-INF/classes</targetPath>
			</resource>
		</webResources>
	</configuration>
</plugin>


Comments