 |
|
메이븐 2 다루기: 첫 번째 메이븐 2 프로젝트
첫 번째 예제에서는 메이븐 2를 사용하여 적은 노력으로 간단한 프로젝트를 빌드하는 방법을 살펴보겠다. 메이븐 2의 자바 프로젝트에 대한 내장 지식을 쓰면 다른 빌드 도구에서 필요할지도 모르는 지루한 설정을 줄일 수 있다.
산술 연산을 하는 클래스
예제로 산술 연산을 다루는 클래스를 사용한다. 메인 클래스는 NumOps이고 소스 코드는 Listing 4에 나와있다.
Listing 4. NumOps 클래스
package com.ibm.devworks;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class NumOps {
private List <Operation> ops = new ArrayList
<Operation>();
public NumOps() {
ops.add( new AddOps());
}
public Operation getOp(int i)
{ Operation retval;
if (i > ops.size())
{ retval = null;
} else {
retval = (Operation) ops.get(i);
} return retval;
}
public int size() {
return ops.size();
}
public static void main( String[] args ) {
NumOps nop = new NumOps();
for (int i=0; i < nop.size(); i++) {
System.out.println( "2 " +
nop.getOp(i).getDesc() +
" 1 is " +
nop.getOp(i).op(2,1) );
}
}
}
|
NumOps 클래스는 두 개의 정수에 산술 연산을 할 수 있는 객체들의 집합을 관리한다. 메인 메서드는 NumOps 인스턴스를 생성하고NumOps에 의해 관리되는 객체들에 각각 getDesc() 메서드와 op() 메서드를 호출한다. NumOps에 의해 관리되는 모든 객체는 Operation 인터페이스를 구현했다. 이 인터페이스는 Listing 5에 나와있다.
Listing 5. Operation 인터페이스
package com.ibm.devworks;
public interface Operation {
int op(int a, int b);
String getDesc();
}
|
첫 예제에서 이 인터페이스를 구현한 클래스는 AddOps 클래스 하나다. Listing 6에 있다.
Listing 6. AddOps 클래스
package com.ibm.devworks;
public class AddOps implements Operation {
public int op(int a, int b) {
return a+b;
}
public String getDesc() {
return "plus";
}
} |
NumOps 클래스를 실행하면 다음과 같은 결과가 출력된다.
초기 프로젝트를 만들기 위해 Archetype 사용하기
메이븐을 사용하여 빌드할 수 있는 간단한 자바 프로젝트에 필요한 것들을 만들기 위해 메이븐 2와 함께 기본으로 제공하는 Archetype 플러그인을 사용할 수 있다. build-phase 플러그인과 달리 Archetype 플러그인은 메이븐 프로젝트 빌드 생명주기 밖에서 수행되며 메이븐 프로젝트를 만들기 위해 사용한다. NumOps 프로젝트를 가지고 있을 디렉터리에서 아래에 있는 명령을 실행한다(모두 한 줄로 입력해야 한다).
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes
-DgroupId=com.ibm.devworks -DartifactId=NumOps
|
명령은 com.ibm.devworks/NumOps/1.0-SNAPSHOT이라는 이름으로 모듈 코디네이트가 Archetype 플러그인을 제공한다. 이 경우 Archetype 플러그인이 항상 1.0-SNAPSHOT를 기본으로 사용하고 있기 때문에 버전을 명시할 필요가 없다. 이 명령문은 관례적인 메이븐 2 디렉터리 구조에 따라 프로젝트에 필요한 시작점인 pom.xml 파일을 만든다. 본 튜토리얼의 소스 코드는 example 1 디렉터리에서 찾을 수 있다(다운로드를 보기 바란다).
결과는 Listing 7과 비슷할 것이다.
Listing 7. 메이븐 Archetype을 사용해 NumOps 프로젝트 만들기
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------------
---
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:create] (aggregator-style)
[INFO] -------------------------------------------------------------------------
---
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus
...
[INFO] [archetype:create]
[INFO] Defaulting package to group ID: com.ibm.devworks
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating Archetype: maven-archetype-quicks
tart:RELEASE
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: groupId, Value: com.ibm.devworks
[INFO] Parameter: packageName, Value: com.ibm.devworks
[INFO] Parameter: basedir, Value: C:\temp\maven
[INFO] Parameter: package, Value: com.ibm.devworks
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: artifactId, Value: NumOps
[INFO] ********************* End of debug info from resources from generated POM
***********************
[INFO] Archetype created in dir: C:\temp\maven\NumOps
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Sat Dec 02 22:04:02 EST 2006
[INFO] Final Memory: 4M/8M
[INFO] ------------------------------------------------------------------------
|
Archetype 플러그인은 디렉터리 트리, pom.xml 파일, App.java 애플리케이션을 만든다. 단위 테스트 소스 코드를 위한 디렉터리 트리와 AppTest.java 단위 테스트도 생성한다. 이 프로젝트는 이제 준비가 다 됐다. 그림 6에서 Archetype 플러그인으로 만든 디렉터리와 파일들을 볼 수 있다.
그림 6. Archetype이 생성한 디렉터리와 파일들
이제 해야 할 일은 NumOps.java, Operation.java, AddOps.java 파일을 App.java가 있는 곳으로 이동시키고 App.java 파일을 삭제하는 것이다. 다음 절에서는 생성된 pom.xml을 커스터마이징해 몇 가지 변화를 주겠다.
|