작성자. 편현장(slothink)

작성일. 09-01-13

 

이 문서는 동일한 소스를 이용하지만, 환경에 의해 서로 다른 설정을 사용할 경우 profile filter 를 이요한 maven build 방법을 소개하고 있다. 또한 maven 의 실행에 대해서도 간략하게 설명한다.

 

maven의 명령을 실행하는 방법은 2가지가 있다.

 

l  command 창에서 명령어 직접 입력

l  m2clipse maven/build 명령을 이용하여 실행

 

command 창에서의 명령어 입력

command 창에서의 입력은 이전 개발 환경 구축하기 문서에서 적용하였던 패스 설정에 의하여(M2_HOME 또는 MAVEN_HOME 패스 설정) mvn.bat 을 실행하면 된다.

또한 이것을 실행할 경우엔 해당 pom 의 디렉토리로 이동하여 실행하면 된다.


d:\workspace\vines\vine\edms\edms-webapp>mvn package

 

m2clipse 를 이용한 maven 명령어 입력

프로젝트를 선택한 후 마우스 우클릭을 실행하면 run 항목 하위로 build 2가지를 찾을 수 있다. 단축키가 없는 하위 build 를 실행하여 실행할 속성들을 정의할 수 있다. 단축키가 있는 상위 build 항목은 이전에 실행했던 build 명령을 나열해준다. 단축키를 활용하면 매우편하다.


 

작품을 떨궈내려면 package goal 을 실행하면 된다. 실행방법은 위 2가지 중 어느 것을 선택해도 무방하다. m2clipse 의 경우 run as/maven package 가 이미 존재한다.

 

그러나 사이트별로 프로퍼티가 교체된 작품을 떨구기 위해선 package 실행 중에 profile 을 적용하여 실행하여야한다. 콘솔에선 아래와 같이 입력한다.

 

mvn package –P [profile id]

 

캐논용으로 떨구기 위한 예제는 아래와 같다.


mvn package -P canon



m2clipse 를 이용할 경우엔 profile 설정을 적용하기 위해서 Run as/package 가 아니라 Run as/build 항목을 이용하여 별도의 profile 을 기입해야한다.


위와 같이 실행하면 ${base}/target 디렉토리에 결과물(war,jar,pom 등이 생성된다.)

 

profile 이해하기

그러면 위 profile 은 어떤식으로 돌아가게 되는 것일까?

뒤에서부터 쫓아가보도록 하자.

 

goal 실행시 profile 옵션을 주게 되면(ex. mvn package –P slothink) (실행위치의)pom.xml, (실행위치의)profiles.xml, ${user.home}/settings.xml, ${M2_HOME}/conf/settings.xml 순으로 profile 항목을 찾는다. 이와 같이 찾는 도중에 profile id 가 동일한 경우가 나타나면 해당 profile 에서 선언된 내용을 적용한다.

 

다음은 profiles.xml 에 적용된 내용이다.



위에 경우에 profile 마다 별도의 property 를 설정하고 있다. slothink 의 경우 env 라는 프로퍼티의 값으로 slothink 를 할당하고 있다.

 

위와 같이 profile 을 적용하였다면 해당 적용사항은 pom 에서 사용한다. (사용안할 속성은 당연히 적을 필요가 없다).

 

pom.xml 을 살펴보자.


여기서 주의 깊게 볼 부분은 build/filters build/resources 항목이다. 이것이 의미하는 바는 filtering true 가 적용된 resource 안에 filters 에 등록된 값을 치환하라는 의미이다.

resource 항목은 치환대상이 되며 치환할 값은 filter 에 기술되어있다는 뜻이다. 치환된 resource build 시에 사용된다. 그리고 filter 파일을 선택하기 위해 이전 profile 항목에서 기술된 property 속성이 filter 경로에 사용된 것을 볼 수 있다.(i.e. ${env} )

 

실제 샘플을 보자.

src/main/resource/edms.properties (치환 대상 : 리소스)


 

src/main/filters/edms.properties (치환 값 : 필터)



위와 같이 치환 대상(리소스)은 치환할 부분을 ${[속성명]} 과 같이 기술하며 필터 파일에서는 [속성명]=[속성 값] 과 같이 기술한다.

 

이러한 메커니즘을 이용하여, 각 개발자는 자신의 환경에 맞게 profile filter 를 추가하여 사용할 수 있다.

 

그러나 매번 profile 사용하기 위해서 console 상에서 profile 옵션을 주거나 m2clipse build 항목을 이용하는 것은 불편할 것이다. 이것은 ${user.home}/settings.xml 이나 ${M2_HOME}/conf/settings.xml 에서 기본으로 실행할 profile 을 기술하므로 해결할 수 있다.

 

${M2_HOME}/conf/settings.xml


+ Recent posts