들어가며

maven 에 관한 문서를 찾아보다가 아래 사이트에서 상당히 괜찮은 문서를 찾았다. 아래 사이트를 따라하면서 maven 을 이해해보도록 하겠다.

http://www.sonatype.com/books/maven-book/reference/public-book.html

 

설치하기

eclipse 에서 maven 을 지원하는 플러그인이 나와있다 업데이트 주소는 아래와 같다

http://m2eclipse.sonatype.org/update/

이클립스 메뉴의 Help-Install New Software 에 들어가서 위의 URL 을 입력하고 설치하기 바란다.

 

 

프로젝트 만들기

m2eclipse 를 설치하면 위와같이 3가지 형태의 maven 프로젝트를 만들수 있는데 Maven Project 를 만들어 선택하고 Next 를 누르자.

 

maven 은 다양한 archetype을 지원하는데 여기서 archetype 란 기본적인 프로젝트 셋팅 이라고 보면된다. 우리는 셋팅이 하나도 되어있지 않은 프로젝트를 생성할것이기 때문에 archetype 를 선택하지 말고 skip 하도록 Create a simple project 를 체크하고 Next 를 누른다.

 

Group Id 는 java 의 package 와 같은 개념으로 보면 된다.

Artifact Id 는 메이븐 프로젝트의 이름으로 이 값이 만들어졌을때 이클립스 프로젝트 명이 된다.

Name 과 Description 은 해당 프로젝트의 설명 이다.

일단 위와같이 입력하고 Next 를 누른다.

 

dependencies 설정하는 부분이 나오는데 현재는 없음으로 그냥 Finish를 누른다.

 

위와같은 형태의 프로젝트가 생성된것을 확인할수 있을것이다.

 

 

MAVEN 프로젝트 구조

프로젝트 디렉토리를 확인해보면 아래와 같다.

simple/

   pom.xml

   src/

      main/

         java/

         resources/

      test/

         java/

         resources/

   target/

      classes/

      test-classes/

이 디렉토리 구조는 maven 표준 디렉토리 구조이다. 이제 의미를 알아보도록 하겠다.

simple/ - 디렉토리명은 artifact id 의 값과 일치한다.

pom.xml - 모든 maven 프로젝트는 Project Object Model (POM) 이라는 이름의 셋팅파일을 같는다.

main/ – 이 디렉토리는 프로그램의 모든 소스파일과 리소스 파일이 들어가는 디렉토리 이다. 예를들어 properties 파일같은경우 resources 디렉토리에 집어넣으면 된다.

test/ – 이 디렉토리는 junit 테스트 프로그램이 위치하게 된다.

 

HELLO 프로그램하기

우리의 maven 프로젝트에 아래 프로그램을 집어넣는다. package 가 아까 설정했던 group id 와 같은것을 유념해서 디렉토리를 만든후에 작성하도록 한다.

package net.cranix;

public class Hello {
    public static void main(String args[]) {
        System.out.println("Hello Maven World!");
    }
}

다 작성했다면 프로젝트에 마우스오른쪽 버튼 눌러서 Run As-maven package 를 차례로 클릭한다.

 

콘솔창에 무언가 뜨고 조금 지나면 BUILD SUCCESSFUL 이라는 결과가 출력된다.

과연 무엇이 바뀐것일까. 프로젝트 네비게이터에서 F5 키를 눌러서 리플래쉬 시켜보면 새로생긴 파일과 디렉토리가 보인다.

확인해보면 아래와 같다.

target/

   classes/

      net/

         cranix/

            Hello.class

   maven-archiver/

      pom.properties

   test-classes/

   simple-0.0.1-SNAPSHOT.jar

위와 같이 .jar 파일이 생성된 것을 알 수 있다.

 

 

테스트 하기

테스트를 하기 위해서는 junit 라이브러리가 필요하다. maven 에서는 이런 의존관계 설정이 쉽게 되는데 pom.xml 파일을 열어서 Dependencies 탭에 가서 추가만 해주면 된다.

 

위 버튼을 눌러서 아래와같이 검색하자. 알아서 리모트에있는 라이브러리를 검색해서 리스팅 해준다. 원하는 junit 를 선택하고 scope 를 test 로 셋팅한다음 OK 버튼을 누른다.

 

그럼 아래와 같이 추가된 것을 확인할 수 있으며 저장을 눌러서 적용하자.

 

이제 라이브러리도 받았으니 테스트 소스만 만들면 된다. 테스트를 위해서는 테스트를 원하는 클래스의 위치를 test 폴더에다가 만들고 *Test 형태로 클래스를 만들어 주면 된다. 예를 들어 Hello 클래스면 HelloTest 라는 클래스를 만들어 주면 된다.

위와 같이 HelloTest.java 파일을 위치시켰다.

HelloTest 파일의 내용은 아래와 같다.

package net.cranix;

import junit.framework.TestCase;

public class HelloTest extends TestCase{
    public HelloTest(String app) {
        super(app);
    }
    public void testHello() {
        assertTrue(true);
    }
}

 

이제 테스트를 수행하려면 패키지이름에 마우스오른쪽버튼 누르고 Run As-maven test 를 클릭하면 된다. Console 창에 테스트가 수행되는 화면을 확인할 수 있을 것이다.

 

프로그램 실행하기

Run As – Maven build 를 차례로 클릭해서 아래와 같이 설정한다. 파라메터에 mainClass 지정해 주는 것도 잊지 말자.

 

Run 을 누르게 되면 Console 화면에 실행되는 결과를 볼 수 있다.

[INFO] Searching repository for plugin with prefix: 'exec'.
[INFO] Attempting to resolve a version for plugin: org.codehaus.mojo:exec-maven-plugin using meta-version: LATEST
[INFO] Using version: 1.1.1 of plugin: org.codehaus.mojo:exec-maven-plugin
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building simplename
[INFO]
[INFO] Id: net.cranix:simple:jar:0.0.1-SNAPSHOT
[INFO] task-segment: [exec:java]
[INFO] ------------------------------------------------------------------------
[INFO] [exec:java]
Hello Maven World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Sun Aug 16 00:48:28 KST 2009
[INFO] Final Memory: 1M/8M
[INFO] ------------------------------------------------------------------------

 

 

마치며

요즈음에는 자바기반 프로젝트를 하게 되면 거의 필수적으로 아파치 같은 공개 라이브러리를 쓰게 된다. 그러나 이런 라이브러리 역시 다른 라이브러리를 사용하는 것이 대부분이다. 이러다 보니 몇 개의 라이브러리만 가져다 써도 나중에 배포할 때는 의존관계를 따져가며 상당히 귀찮은 작업을 해야 한다. maven 은 이런 귀찮은 작업을 상당히 줄여줄 것으로 기대된다.

by cranix 2009. 8. 16. 01:06