본문 바로가기

Apache Jakarta Project/Maven

Apache Maven 2.0.9

Download Maven 2.0.9

http://maven.apache.org/download.html

cmd>mvn -version

출처 : http://javajigi.tistory.com/91


1. Maven의 Eclipse 플러그인 활용하기
Maven 기반으로 개발되어 있는 프로젝트를 Eclipse 프로젝트로 변환하는 작업은 간단하다. Maven의 Eclipse 플러그인을 이용하여 쉽게 Eclipse 프로젝트로 만들 수 있다.

프로젝트 디렉토리로 이동한 다음 "mvn eclipse:eclipse" 명령어를 실행하면 Eclipse 기반 프로젝트로 변경된다. Eclipse 프로젝트에 필요한 .project, .classpath 파일들이 자동적으로 생성된다. .classpath 파일을 열어보면 pom.xml 파일에서 의존관계에 있는 모든 라이브러리들이 자동적으로 추가되어 있는 것을 확인할 수 있다.

예를 들어 pom.xml 파일이 다음과 같이 설정되어 있다고 가정하다.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
</dependency>

위와 같이 junit 라이브러리와 dependency 설정이 되어 있다면 이 정보는 .classpath에 다음과 같이 추가된다.

<classpathentry kind="var"
    path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"
    sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>

.classpath에서 눈여겨 볼 부분은 sourcepath가 자동적으로 설정된다는 것이다. Maven은 라이브러리를 배포할 때 자바 소스까지 분리해서 배포하는 것이 가능하도록 지원하다. Eclipse 기반으로 애플리케이션을 개발할 때 F3나 디버깅을 많이 이용할 것이다. 이 기능들을 이용할 때 불편했던 점은 외부 라이브러리에 대한 소스 코드가 존재하지 않아 소스 코드를 분석하는데 한계가 있었던 것이 사실이다. 그러나 Maven을 이용할 경우 이 같은 단점을 보완할 수 있다. Maven을 이용하여 소스 코드를 배포하는 모든 라이브러리의 소스 코드는 자동적으로 Local Repository에 다운받아져 위와 같이 설정이 가능하기 때문에 Eclipse에서 외부 라이브러리 소스코드에 접근하기 용이해진다.

디폴트 pom.xml을 사용할 경우 자바 프로젝트가 생성된다. 만약 웹 애플리케이션을 생성하기 위하여 WTP 기반으로 애플리케이션을 개발하고자 한다면 pom.xml에 다음과 같은 설정을 추가함으로서 해결할 수 있다.

<plugins>
    <plugin>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.4</version>
        <configuration>
            <downloadSources>true</downloadSources>
            <downloadJavadocs>true</downloadJavadocs>
            <wtpversion>1.5</wtpversion>
        </configuration>                
    </plugin>
</plugins>

Maven의 Eclipse 플러그인에 대한 설정에 WTP에 대한 설정을 추가하고 "mvn eclipse:eclipse" 명령어를 실행하면 WTP 기반으로 프로젝트를 진행할 수 있도록 Eclipse 프로젝트가 생성된다.

만약 Spring IDE를 사용할 경우 .project 파일에 Spring IDE Nature를 추가하는 것도 가능하다.

<plugins>
    <plugin>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.4</version>
        <configuration>
            <additionalProjectnatures>
                <projectnature>
                    org.springframework.ide.eclipse.core.springnature
                </projectnature>
            </additionalProjectnatures>
            <additionalBuildcommands>
                <buildcommand>
                    org.springframework.ide.eclipse.core.springbuilder
                </buildcommand>
            </additionalBuildcommands>
            <downloadSources>true</downloadSources>
            <downloadJavadocs>true</downloadJavadocs>
            <wtpversion>1.5</wtpversion>
        </configuration>               
    </plugin>
</plugins>

위와 같이 설정한 다음 생성된 .project 파일을 열어보면 다음과 같다.

<projectDescription>
  <name>myarchetype</name>
  <comment/>
  <projects/>
  <buildSpec>
    <buildCommand>
      <name>org.eclipse.jdt.core.javabuilder</name>
    </buildCommand>
    <buildCommand>
      <name>org.eclipse.wst.common.project.facet.core.builder</name>
    </buildCommand>
    <buildCommand>
      <name>org.eclipse.wst.validation.validationbuilder</name>
    </buildCommand>
    <buildCommand>
      <name>org.springframework.ide.eclipse.core.springbuilder</name>
    </buildCommand>
  </buildSpec>
  <natures>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
    <nature>org.springframework.ide.eclipse.core.springnature</nature>
  </natures>
</projectDescription>

2. 생성된 Eclipse 프로젝트 Import 하기
Maven을 이용하여 생성한 프로젝트를 import 하는 방법은 간단하다. 가능하면 현재 Eclipse가 사용하고 있는 Workspace 아래에 프로젝트를 생성하는 것이 좋다. Workspace 아래에 프로젝트를 생성한 다음 Eclipse의 import || General || Existing Projects into Workspace를 이용하여 Import 한다.


Maven을 이용하여 생성한 프로젝트를 import 하면 빌드 에러가 발생할 것이다. 그 이유는 앞의 .classpath에서 확인할 수 있듯이 M2_REPO가 classpath variable에 추가되어 있지 않기 때문이다. Window || Preferences || Java || Build Path || Classpath Variables로 이동한 다음 M2_REPO를 추가할 수 있다.


위와 같은 간단한 작업을 WTP 기반의 Eclipse 프로젝트를 생성하는 것이 가능하다. Maven의 디폴트 디렉토리 구조는 디폴트 웹 애플리케이션 디렉토리 구조가 아니다. 그럼에도 불구하고 WTP를 이용하여 Maven 프로젝트를 테스트할 수 있는 이유는 Maven에 의하여 자동적으로 생성되는 설정파일을 통하여 확인할 수 있다.

WTP의 모든 설정 파일은 .settings 디렉토리에 생성된다. .settings 디렉토리 하위의 org.eclipse.wst.common.component 파일을 열어보면 다음과 같다.

<project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="myarchetype">
        <property name="context-root" value="myarchetype" />
        <wb-resource deploy-path="/" source-path="src/main/webapp" />
        <property name="java-output-path" value="/target/classes" />
        <dependent-module deploy-path="/WEB-INF/lib"
            handle="module:/classpath/var/M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar">
            <dependency-type>uses</dependency-type>
        </dependent-module>
        <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-module>
</project-modules>

org.eclipse.wst.common.component 파일을 보면 WTP가 실행할 때 접근해야 할 리소스와 클래스 파일들의 위치가 Maven 디폴트 디렉토리로 설정되어 있는 것을 확인할 수 있다. 또한 의존관계에 있는 라이브러리까지 추가되어 있는 것을 확인할 수 있다. 그러므로 추가적인 설정 없이 WTP 기반으로 테스트 및 개발이 가능하게 된다.

지금까지 애플리케이션을 개발하면서 프로젝트를 처음 생성하고 개발자들간의 개발환경을 세팅하는데 상당히 많은 시간을 소비해왔다. 그러나 Maven의 Eclipse 플러그인 기능은 개발자들의 개발 환경을 쉽게 세팅할 수 있도록 지원함으로서 개발의 효율성을 가져올 수 있다.

다음 강좌에서는 Remote Repository만을 활용할 때의 단점에 대해서 살펴본 다음 Local Repsistory의 필요성 및 환경 세팅하는 방법에 대하여 살펴보도록 하겠다. Local Repository로 활용할 툴은 Artifactory를 사용할 예정이다.