지난 번 포스트에서 메이븐으로 자바 프로젝트의 라이브러리를 관리하는 법을 살펴보았다. 이번 포스트에서 살짝 더 나아가서 메이븐의 꽃이라고 할 수 있는 플러그인에 대해서 알아보자.
메이븐 플러그인은 메이븐의 핵심이다.
일단 개념부터 짚고 넘어가자. 알아야하는 개념은 플러그인(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)을 수정하자.
01.<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"02.xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">03.<modelVersion>4.0.0</modelVersion>04.<groupId>net.kjunine</groupId>05.<artifactId>sample</artifactId>06.<packaging>jar</packaging>07.<version>2.0-SNAPSHOT</version>08.<name>sample</name>09.<url>http://maven.apache.org<;/url>10.<dependencies>11.<dependency>12.<groupId>commons-lang</groupId>13.<artifactId>commons-lang</artifactId>14.<version>2.4</version>15.</dependency>16.<dependency>17.<groupId>junit</groupId>18.<artifactId>junit</artifactId>19.<version>4.5</version>20.<scope>test</scope>21.</dependency>22.</dependencies>23.<build>24.<plugins>25.<plugin>26.<groupId>org.apache.maven.plugins</groupId>27.<artifactId>maven-compiler-plugin</artifactId>28.<configuration>29.<source>1.5</source>30.<target>1.5</target>31.</configuration>32.</plugin>33.</plugins>34.</build>35.</project>주목할 부분은 세 부분이다. 첫째, 프로젝트의 version 을 '2.0-SNAPSHOT'으로 올렸다. 둘째, junit 라이브러리의 버전을 4.5로 올렸다. 셋째, <build /> 부분에 그 안에 compiler 플러그인의 설정을 추가하였다. 여기서 플러그인을 설정하는 방법을 잘 봐두자. 다른 플러그인도 마찬가지 방법으로 설정할 수 있다. compiler 플러그인에 대한 상세한 설명은 여기를 참조하자.
2. SampleTest 클래스를 수정하자.
01.package net.kjunine.sample;02. 03.import static org.junit.Assert.*;04. 05.import org.junit.Test;06. 07.public class SampleTest {08. 09.@Test10.public void testReverse() {11.String actual = Sample.reverse("hello");12.String expected = "olleh";13.assertEquals(expected, actual);14.}15. 16.}JUnit 4.5의 @Test 어노테이션을 사용하도록 수정하였다.
mvn test 명령어를 실행하면 빌드와 테스트가 성공하는 것을 볼 수 있다. 그리고 mvn install 명령어를 실행하면 설치가 성공하는 것을 볼 수 있고, 로컬 리포지토리에 이전 버전인 1.0-SNAPSHOT 버전과 최신 버전인 2.0-SNAPSHOT 버전이 모두 설치되어 있는 것을 볼 수 있다.
메이븐 플러그인을 맛보다..
이 포스트에서 메이븐 플러그인을 살펴보았다. 그러나 여기서 살펴본 것은 거의 맛만 본 수준이다. 메이븐에는 무수한 플러그인이 있고, 또 직접 플러그인을 만들 수도 있다. 메이븐을 제대로 알려면 최대한 많은 프러그인들을 사용해보고 또, 직접 플러그인을 만들어 보는 것이 좋을 것이다.
포스트를 쓰다보니 길어져서 또 나누게 되었다. 다음 포스트에서는 메이븐과 이클립스의 연동을 주제로 '메이븐 시작하기' 시리즈를 마무리하고자 한다. 그럼 다음 포스트에서..
댓글 없음:
댓글 쓰기