개발환경:
- Windows 7 + jdk1.6.0_35(64bit) + Tomcat 7.0.32
- Eclipse Indigo SR2 (SDK v3.7.2)
- WTP 3.3.2(R-3.3.2-20120210195245) + maven-3.0.4(m2e-1.2.0.20120903-1050)
이클립스와 메이븐의 결합은 개발자들에게 편리함을 제공하지만,
한편으론 형상관리와 결합하여 사용할 때 빈번한 .settings의 변화때문에 골치아픈점도 제공하고 있다.
그중 하나가 Dynamic Web Projects와 M2E통합으로 인해
Maven -> Update Project... 명령을 수행하면 .settings/org.eclipse.wst.common.component 파일안의 <property name="context-root" value="/"/> 의 값이 계속변경된다는 것이다.
그럼 이제 context root를 고정시키는 방법에 대해서 알아본다.
이클립스 내에서 m2e-wtp 플러그인을 사용하여 웹프로젝트를 관리할 때 다음과 같이 context root가 관리된다.
첫째, 기본적으로 m2e-wtp는 maven-war-plugin 환경에 정의된 <warName>값으로부터 독립웹애플리케이션의 context root가 적용된다.
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<warName>mywebapp</warName>
</configuration>
</plugin>
둘째, 만약 값이 지정되어 있지 않다면 war 프로젝트의 <build> 섹션에 정의된 <finalName>이 적용된다. 그러므로 http://localhost:8080/project/ 와 같이 접근해야 한다면 다음과 같이 정의한다.
<project>
<groupId>foo.bar</groupId>
<artifactId>web-project<artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<finalName>project</finalName>
...
</build>
</project>
셋째, 마지막으로 pom.xml파일안에 custom property를 설정함으로써 WTP에서 사용할 context root를 변경할 수 있다. 예를 들어 "/"를 사용해야 한다면, 단지 pom.xml 파일의 <properties> 섹션에 <m2eclipse.wtp.contextRoot> property를 정의하면 된다.
<project>
<groupId>foo.bar</groupId>
<artifactId>web-project<artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<finalName>project</finalName>
...
</build>
<properties>
<m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot>
...
</properties>
</project>
<m2eclipse.wtp.contextRoot> 는 <warName> 과 <finalNAme>보다 앞서 적용된다.