'maven plugin'에 해당되는 글 2건

  1. 2009/10/21 메이븐(Maven) 시작하기 (3/3) (4)
  2. 2009/10/09 메이븐(Maven) 시작하기 (2/3) (4)
2009/10/21 23:04

메이븐(Maven) 시작하기 (3/3)

이클립스에서 메이븐 프로젝트를 해보자.

개발을 하는데 이클립스와 같은 IDE를 사용할 수 없다면 생산성이 급격히 낮아질 것이다. 메이븐 프로젝트 역시 마찬가지다. 메이븐이 편리한 도구라서 쓰고 싶은데 IDE를 지원하지 않는다면 무용지물일 것이다. 하지만 메이븐은 좋은 도구답게 이클립스를 비롯한 다양한 IDE를 지원한다. 여기에서도 플러그인이 사용되는데, 조금 재밌는 것은 메이븐에도 이클립스 플러그인이 있고, 이클립스에도 메이븐 플러그인이 있다는 것이다. 두 가지의 차이는 프로젝트를 어디에서 시작을 하는 것이냐는 것이다. 메이븐 이클립스 플러그인은 메이븐에서 먼저 시작하고, 이클립스 메이븐 플러그인은 이클립스에서 먼저 시작한다. 두 가지 모두 사용 가능하지만 결국에는 이클립스의 메이븐 플러그인을 많이 사용하게 될 것이다. 명령어를 치는 것보다 IDE에서 클릭 몇번으로 프로젝트를 생성하고 관리하는 것이 편리하니까..

먼저 메이븐 이클립스 플러그인을 사용하여 보자.

1. 프로젝트를 생성한다.

지금은 이전에 만들어 놓았던 프로젝트를 그냥 쓰기로 하자. ^-^

2. mvn eclipse:eclipse

프로젝트 폴더에서 eclipse 플러그인의 eclipse 골을 실행하는 명령어를 실행한다.

 mvn eclipse:eclipse

'BUILD SUCCESSFUL' 이 보이면서 완료되면 다음과 같은 이클립스 프로젝트 관련 파일들이 생긴다.

  • .project: 프로젝트 설정 파일
  • .classpath: 클래스패스 설정 파일
  • .settings: 기타 설정 파일들을 포함하는 폴더

3. Import Project

이클립스에서 Import Project.. 를 통해 프로젝트를 워크스페이스(Workspace) 내부로 가져온다.

'Existing Projects into Workspace'를 선택하고 메이븐 프로젝트가 있는 경로를 선택해주면 된다.

메이븐으로 이미 만든 프로젝트는 위와 같이 메이븐의 이클립스 플러그인으로 간편하게 이클립스 프로젝트로 만들면 된다.

이클립스에서 전부 다 하자.

이제는 처음부터 이클립스에서 메이븐 프로젝트를 만드는 방법을 알아보자. 그러기 위해서는 이클립스의 메이븐 플러그인을 이클립스에 설치해야 한다. 메이븐 플러그인으로는 M2EclipseQ4E 등이 있다. 둘 중에 아무거나 사용하면 될 것 같다. 나는 이전에 m2eclipse를 설치했는데 요즘엔 q4e가 더 좋다는 것 같기도.. @_@

이클립스의 Software Update에서 다음 사이트(Site)를 추가하고 설치하면 된다.

메이븐 플러그인을 설치한 후에 다음을 진행하도록 하자.

1. 프로젝트를 생성한다.

이클립스에서 다음과 같이 프로젝트를 생성한다. 옵션은 필요에 따라 바꾸면 될 것이다.

다음과 같이 프로젝트가 생성된다.

자동으로 App.java 파일과 AppTest.java 파일이 생성되었고, JUnit 3.8.1과의 의존성에 따라 프로젝트 클래스패스도 만들어졌다.

자동으로 만들어진 App.java, AppTest.java 파일들은 가뿐하게 지워주자.

2. 자바 버전을 5로 올리자.

자바 1.4보다는 자바 5 이상의 버전이 좋다. 메이븐 프로젝트를 처음 생성하면 기본적으로 자바 1.4에 맞춰져 있기 때문에 바꿔주어야 한다.

이전에 했던 대로 POM 파일에서 maven-compiler-plugin 설정을 추가해주면 된다. 직접 파일을 수정할 수도 있겠지만 이클립스의 도움을 받아보자.

이클립스에서 pom.xml 파일을 열면 자동으로 Maven POM editor로 열린다. 에디터 하단에서 plugin 탭을 선택하자. Plugins 부분에서 Add.. 버튼을 클릭하고, Plugin Details 부분에서 다음 그림과 같이 내용을 채워준다.

그리고 Executions 위에 있는 Configuration 링크를 클릭하여 다음 그림과 같이 나머지 설정을 넣어준다.

플러그인을 설정하는 것은 각 플러그인마다 설정하는 항목이 다르므로 결국 수동으로 작성해야 하는 불편함이 있는 것 같다.

이번엔 Dependencies 탭으로 가보자. JUnit 3.8.1이 라이브러리로 등록되어 있는데 자바 5로 올렸으니 거기에 맞게 JUnit도 4.5로 올려주자.

Dependencies 부분에서 junit을 선택하고 Dependency Details 부분에서 버전을 4.5로 바꿔준다.

3. 다른 라이브러리를 더 추가하자.

여기서는 역시 Commons Lang 라이브러리를 사용해보자. POM 에디터의 dependencies 탭에서 직접 추가할 수도 있겠지만.. 조금 더 편하게 라이브러리를 검색해서 추가하는 방법도 있다.

프로젝트에서 마우스 오른쪽 클릭 후 나오는 메뉴에서 Maven > Add Dependency 를 선택한다.

다음처럼 나오는 창에서 라이브러리를 검색하고, 원하는 라이브러리가 보이면 선택한다. 원하는 버전을 골라서 선택할 수 있다.

다음과 같이 commons-lang 라이브러리가 추가된 것을 볼 수 있다.

필요한 라이브러리를 모두 추가했으면 개발을 시작하자.

4. 소스와 테스트 파일을 추가한다.

Sample.java

package net.kjunine.maven.eclipse;

import org.apache.commons.lang.StringUtils;

public class Sample {

	public static String reverse(String s) {
		return StringUtils.reverse(s);
	}

	public static void main(String[] args) {
		for (int i = 0; i < args.length; i++) {
			System.out.println(reverse(args[i]));
		}
	}

}

SampleTest.java

package net.kjunine.maven.eclipse;

import static org.junit.Assert.*;

import org.junit.Test;

public class SampleTest {

	@Test
	public void testReverse() {
		String actual = Sample.reverse("hello");
		String expected = "olleh";
		assertEquals(expected, actual);
	}

}

이전 예제에서 사용한 예제 그대로이다. 다른 예제를 만들기가 귀차나서.. ㅠ_ㅠ

에러가 생기면 POM 에디터에서 수정한 사항이 프로젝트에 반영이 제대로 안 된 것이니 프로젝트에서 마우스 오른쪽 클릭 후  나오는 메뉴에서 Maven > Update DependenciesUpdate Project Configuration 을 실행하여 반영시키자.

5. 프로젝트를 테스트하고 빌드한다.

프로젝트에서 마우스 오른쪽 클릭 후 나오는 메뉴에서 Run As > Maven 으로 시작하는 많은 메뉴 아이템들을 볼 수 있다. 콘솔에서 직접 입력해서 실행하던 메이븐 명령어를 방금 언급한 메뉴를 선택하는 것으로 쉽게 실행할 수 있다.

빌드, 테스트 후 그리고 로컬 리포지토리에 설치하려면 아래 메뉴들 중에서 'Maven install' 메뉴를 선택한다.

콘솔 창에 'BUILD SUCCESSFUL' 이라고 메시지가 뜨면 성공한 것이다.

'Maven build...' 메뉴를 선택하면 다음과 같은 팝업창이 떠서 다른 플러그인의 골을 실행할 수 있다. 다음과 같이 exec:java 골을 실행하여 위에서 만든 프로그램을 실행하여 보자.

콘솔 창에 'BUILD SUCCESSFUL' 이라는 메시지와 함께 결과가 제대로 나오는 것을 볼 수 있을 것이다.

자바 프로젝트는 항상 메이븐과 함께 하자.

이제 메이븐의 기초를 배웠으니 자바 프로젝트를 만들 때는 항상 메이븐으로 시작하자. 이클립스 플러그인의 도움을 받으면 몇번의 클릭으로 거의 모든 것을 할 수 있으니 어려워하지 않아도 될 것 같다.

이것으로 첫 시리즈인 메이븐 시작하기 시리즈를 마친다. 자세하게 쓸려고 노력했지만 의미가 충분히 전달되지 않은 것도 많은 것 같다. 잘 이해가 안 가거나 잘 못된 부분은 댓글로 남겨주길 바라고, 더 자세히 알고싶으면 메이븐 홈페이지메이븐 책을 참고하길 바란다.

앞으로는 더 높은 수준의 포스트를 기대하며..

저작자 표시
Trackback 0 Comment 4
2009/10/09 22:34

메이븐(Maven) 시작하기 (2/3)

지난 번 포스트에서 메이븐으로 자바 프로젝트의 라이브러리를 관리하는 법을 살펴보았다. 이번 포스트에서 살짝 더 나아가서 메이븐의 꽃이라고 할 수 있는 플러그인에 대해서 알아보자.

메이븐 플러그인은 메이븐의 핵심이다.

일단 개념부터 짚고 넘어가자. 알아야하는 개념은 플러그인(Plugin)과 골(Goal)이다.

플러그인은 메이븐의 핵심 구성 요소이다. 다시 말하면 메이븐은 플러그인들의 집합이라고 할 수 있다. 참고로 메이븐 홈페이지의 플러그인 페이지에서 사용 가능한 플러그인들의 목록을 볼 수 있다. 그리고 플러그인은 관련있는 골들의 집합이다. 골은 메이븐에서 작업의 단위이라고 할 수 있다. 앤트(Ant)를 안다면 앤트의 태스크(task)와 유사한 것으로 생각해도 될 것이다. 메이븐 생명주기의 관점에서 보면 빌드 단계(Build Phase)에는 그 단계가 실행하는 골이 정해져있다. 예를 들면, compile 빌드 단계는 compiler 플러그인의 compile 골을 실행하고, package 빌드 단계는 jar 플러그인의 jar 골을 실행한다.

정리하면 메이븐에는 무수한 플러그인들이 있고, 각 플러그인들은 관련된 골들을 묶어 놓은 것이다. 그리고 각 골들은 메이븐 빌드 단계에서 수행되는 하나의 작업인 것이다. 더 자세한 설명은 역시 메이븐 홈페이지메이븐 책(Maven: The Definitive Guide)를 참고하자.

메이븐 플러그인을 사용해 보자.

사실 지난 번 포스트에서 이미 메이븐 플러그인을 사용해 보았다.

mvn archetype:generate -DgroupId=net.kjunine -DartifactId=sample -Dpackage=net.kjunine.sample -Dversion=1.0-SNAPSHOP

위 명령어를 기억하는가? 위 명령어에서 'archetype:generate'는 archetype 플러그인의 generate 골을 실행하라는 메이븐 명령어이다. 참고로 archetype 플러그인은 자바 프로젝트를 생성하는 것과 관련있는 골들의 모음이다. 이 플러그인에 대해 자세한 설명은 여기를 참고하자. 여기서 보여주고 싶은 것은 플러그인의 골을 실행하는 방법이다. mvn 명령어에 플러그인:골 형식의 옵션과 -D를 붙인 key=value 형식의 파라메터들을 덧붙여서 실행하면 된다.

그리고 지난 번 포스트에서 완성된 프로젝트를 실행하는 방법이 좀 까다로웠던 것을 기억하는가?

java -cp target/sample-1.0-SNAPSHOT.jar;"%HOME%/.m2/repository/commons-lang/commons-lang/2.4/commons-lang-2.4.jar" net.kjunine.sample.Sample hello kjunine

위와 같이 클래스패스를 복잡하게 설정하면서 실행했었는데 이것을 exec 플러그인을 사용하면 간단하게 실행시킬 수 있다. exec 플러그인의 상세한 설명은 여기를 참조하자.

mvn exec:java -Dexec.mainClass=net.kjunine.sample.Sample -Dexec.args="hello kjunine"

exec 플러그인이 POM 파일을 참조해 라이브러리와 프로젝트의 의존 관계를 파악해서 알아서 클래스패스를 설정해주므로 명령어가 매우 간단해졌다. 결과는 다음과 같이 나온다.

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'exec'.
[INFO] ------------------------------------------------------------------------
[INFO] Building sample
[INFO]    task-segment: [exec:java]
[INFO] ------------------------------------------------------------------------
[INFO] Preparing exec:java
[INFO] No goals needed for project - skipping
[INFO] [exec:java]
olleh
eninujk
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Fri Oct 09 21:51:55 KST 2009
[INFO] Final Memory: 5M/9M
[INFO] ------------------------------------------------------------------------

플러그인을 실행하는 방법을 알아봤으니 이번에는 POM 파일에서 플러그인의 설정을 하는 방법을 알아보자.

메이븐으로 자바 프로젝트를 빌드할 때 compiler 플러그인의 설정을 바꿔주지 않으면 기본적으로 JDK 1.4 버전을 기준으로 컴파일한다. 그래서 지난 번 포스트에서는 JUnit 라이브러리의 버전이 3.8.2였던 것이다. 이번 기회에 JDK 버전과 JUnit 버전을 각각 1.5와 4.5로 올리고, @Test 어노테이션(Annotation)을 사용해 보자.

1. POM 파일(pom.xml)을 수정하자.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.kjunine</groupId>
  <artifactId>sample</artifactId>
  <packaging>jar</packaging>
  <version>2.0-SNAPSHOT</version>
  <name>sample</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.5</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

주목할 부분은 세 부분이다. 첫째, 프로젝트의 version 을 '2.0-SNAPSHOT'으로 올렸다. 둘째, junit 라이브러리의 버전을 4.5로 올렸다. 셋째, <build /> 부분에 그 안에 compiler 플러그인의 설정을 추가하였다. 여기서 플러그인을 설정하는 방법을 잘 봐두자. 다른 플러그인도 마찬가지 방법으로 설정할 수 있다. compiler 플러그인에 대한 상세한 설명은 여기를 참조하자.

2. SampleTest 클래스를 수정하자.

package net.kjunine.sample;

import static org.junit.Assert.*;

import org.junit.Test;

public class SampleTest {

	@Test
	public void testReverse() {
		String actual = Sample.reverse("hello");
		String expected = "olleh";
		assertEquals(expected, actual);
	}

}

JUnit 4.5의 @Test 어노테이션을 사용하도록 수정하였다.

mvn test 명령어를 실행하면 빌드와 테스트가 성공하는 것을 볼 수 있다. 그리고 mvn install 명령어를 실행하면 설치가 성공하는 것을 볼 수 있고, 로컬 리포지토리에 이전 버전인 1.0-SNAPSHOT 버전과 최신 버전인 2.0-SNAPSHOT 버전이 모두 설치되어 있는 것을 볼 수 있다.

메이븐 플러그인을 맛보다..

이 포스트에서 메이븐 플러그인을 살펴보았다. 그러나 여기서 살펴본 것은 거의 맛만 본 수준이다. 메이븐에는 무수한 플러그인이 있고, 또 직접 플러그인을 만들 수도 있다. 메이븐을 제대로 알려면 최대한 많은 프러그인들을 사용해보고 또, 직접 플러그인을 만들어 보는 것이 좋을 것이다.

포스트를 쓰다보니 길어져서 또 나누게 되었다. 다음 포스트에서는 메이븐과 이클립스의 연동을 주제로 '메이븐 시작하기' 시리즈를 마무리하고자 한다. 그럼 다음 포스트에서..

저작자 표시
Trackback 0 Comment 4