본문 바로가기

개발환경/이클립스

Eclipse Helios WTP + Maven2 Dependencies 웹 애플리케이션(war) 개발

개발환경:
- Windows 7 + jdk1.6.0_24(32bit) + Tomcat 7.0.11
- Eclipse Helios SR2 WTP 3.0 + maven-3.0.3

WTP로 Dynamic Web Project를 생성하고 Maven2로 빌드 체계를 만든 목적은 변경한 내용을 즉시 확인하기 위함일 것이다. Eclipse 3.2 부터 maven 및 WTP를 통합해왔던 터라 이 기능을 활용한 개발 생산성은 아주 높았다. 그런데 Eclipse 3.6 helios 부터 이 기능에 버그가 있는 듯 하다.

WTP는 워크스페이스내에 열려있는 프로젝트를 웹 애플리케이션(war)의 WEB-INF/lib 에 배포하기 위해 Deployment Assembly 라는 기능을 추가했다. 그런데 이 기능이 maven과 통합되어 움직이는 것이 아니라 따로따로 동작했다. 즉, 수동으로 Deployment Assembly에 열려있는 프로젝트를 등록하고 삭제하는 작업을 해줘야 한다. 

자 이제 Maven Dependencies 에 있는 참조컴포넌트 또는 라이브러리들이 워크스페이스의 프로젝트로 열리는 순간 Deployment Assembly에 자동 등록하는 방법을 알아본다.

1. 설치된 m2eclipse 버전을 확인한다.

Maven Integration for Eclipse (Required) 0.12.1.20110112-1712  org.maven.ide.eclipse.feature.feature.group


2. m2e-extras 를 설치한다.
Name: m2eclipse extra
Location: http://m2eclipse.sonatype.org/sites/m2e-extras


3. 설치된 버전확인


4. 해당 웹프로젝트를 선택하고 마우스 오른쪽 버튼을 클릭 "Properties -> Deployment Assembly -> Add"

5. Java Build Path Entries -> Next  


6. Maven Depencencies -> Finish


7. 웹 애플리케이션 프로젝트 clean 을 하면 완료된다.

※ 4 ~ 6번 까지의 과정은 아래 그림과 같이 경고(Warning)가 하나 보일 것이다. 이 경고를 해결하기 위해 Ctrl +1 을 해보면 Quick Fix 창이 뜨는데 첫번째 것을 선택하고 확인해도 동일한 결과가 된다. 만약 이미 추가된 경우라면 경고도 보이지 않으며 Java Build Path Entries에도 보이지 않을 것이다.



.classpath 파일

<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<
attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</
classpathentry>


위와 같이 .classpath 에 추가된 것을 확인 할 수 있다.

이제 Maven에 종속되어 있는 프로젝트를 열겨나 닫아보자. 그러면 다음과 같이 Deployment Assembly에 항목이 추가되거나 삭제될 것이다.

또한 WTP를 사용하면 아래와 같은 파일들이 {PROJECT_HOME}/.settings/ 에 생성되며 특히 3개의 파일을 유심히 살펴봐야 한다. 위에서 설정한 내용은 org.eclipse.wst.common.component 에 설정내역이 들어간다.

 

.jsdtscope
org.eclipse.jdt.core.prefs
org.eclipse.wst.common.component
org.eclipse.wst.common.project.facet.core.xml
org.eclipse.wst.jsdt.ui.superType.container
org.eclipse.wst.jsdt.ui.superType.name
org.maven.ide.eclipse.prefs


# org.eclipse.wst.common.component

<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="HibidWeb">
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
        <wb-resource deploy-path="/" source-path="/webapp"/>
        <dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/PersistenceXml/PersistenceXml">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/BidEntity/BidEntity">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/CommonEntity/CommonEntity">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/CommonLib/CommonLib">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/MemberEntity/MemberEntity">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <property name="java-output-path" value="/HibidWeb/target/classes"/>
        <property name="context-root" value="/"/>
    </wb-module>
</
project-modules>



참고: Maven Dependencies for Eclipse Helio WTP