본문 바로가기
Homo Faber/Maven Definitive Guide

2장. 메이븐 설치와 실행

by javauser 2008. 10. 29.

이 장은 수많은 서로 다른 플랫폼에 메이븐 설치에 대한 매우 세부적인 사항을 포함한다. 소프트웨어 설치와 환경 변수 설정에 대한 친숙함의 수준에 관계없이, 불완전한 설치로 인해 발생될 수 있는 문제들을 가능한 한 최소화시키기 위해서 전체적으로 다루는 것을 선택했다. 이 장에서 가정하고 있는 한가지 사실은 사용자가 적당한 JDK를 이미 설치했다는 것이다. 만일 설치에만 관심이 있다면 2.2 절과 2.3 절을 읽은 후에 이 책의 나머지를 건너뛸 수 있다. 메이븐 설치에 대한 세부사항에 관심이 있다면, 이 장의 전체를 통해 설치된 내용과 아파치 소프트웨어 라이센스에 대한 개요를 배울 수 있다.

2.1 자바 설치 확인

비록 메이븐이 Java 1.4에서 실행될 수 있지만, 이 책은 독자가 최소한 Java 5를 실행한다고 가정한다. 여러분의 OS에 맞는 가장 최신의 안정된 JDK를 설치하라. Java 5나 Java 6 모두 이 책의 예제 모두를 작업할 수 있다.

% java -version
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode, sharing)


메이븐은 거의 대부분이 인증된 자바와 호환되는 개발 킷으로 작어되어 있으며, 몇가지는 자바에 인증되지 않은 구현들이 잇다. 이 책의 예제는 Sun Microsystems 의 웹사이트에서 다운로드받은 공식적인 JDK 배포판으로 작성되고 테스트되었다. 리눅스 배포한으로 작업하고 있다면, 여러분에게 맞는 Sun의 JDK를 다운로드 받을 필요가 있으며 호출하는 버전을 확인할 필요가 있다. (위에 나타난대로 java –version 를 실행함으로써) 현재 Sun은 자바를 오픈소스로 선언했기 때문에 이 부분은 앞으로 향상될거라 희망하며, 순수한 배포에서조차 기본적으로 Sun JRE와 JDK를 얻을 것이다. 그날까지 여러분에 맞는 다운로딩을 할 필요가 있다.

2.2 메이븐 다운로드

아파치 메이븐 프로젝트 웹사이트인 http://maven.apache.org/download.html 에서 메이븐을 다운로드받을 수 있다.
메이븐을 다운로드받을 때 웹 사이트에서 아파치 메이븐의 최신 버전을 선택하리라 생각한다. 이 책을 쓰는 시점의 메이븐의 가장 최신 버전은 Maven 2.0.9이다. 아파치 소프트웨어 라이센스에 대해서 친숙하지 않다면, 제품을 사용하기 전에 라이선스의 용어에 대해 친숙해져야 한다. 아파치 소프트웨어 라이선스에 대한 더 많은 정보는 이 장의 후반부인 2.8 절에서 설명할 것이다.

2.3 메이븐 설치

Mac OS X와 MS 윈도우와 같은 OS 간에는 차이가 심하며, 윈도우의 서로 다른 버전 간에도 미묘한 차이가 있다. 다행히, 이러한 모든 OS에 메이븐을 설치하는 과정은 상대적으로 덜 고통스러우며 직관적이다. 다음 절은 다양한 OS에서 메이븐을 설치하는 가장 좋은 추천 방법에 대한 개요를 보여준다.

2.3.1 Mac OS X에 메이븐 설치

http://maven.apache.org/download.html 에서 메이븐의 바이너리 배포판을 다운로드받을 수 있다. 여러분이 작업하기에 편한 형태의 메이븐의 현재 배포판을 다운로드받아라. 다운로드받을 적절한 장소를 선택하고 압축을 풀어라. 만일 /usr/local/maven-2.0.9 디렉토리에 압축을 풀려면, 작업하는데 좀더 편리한 심볼릭 링크를 생성하고 더 새로운 버전으로 업그레이드할 때 환경 설정 변경을 피하기 원할 수도 있다.

/usr/local % ln -s maven-2.0.9 maven
/usr/local % export M2_HOME=/usr/local/maven
/usr/local % export PATH=${M2_HOME}/bin:${PATH}


일단 메이븐이 설치되면, 동작이 제대로 하게 하기 위해서 몇가지 작업이 필요하다. 명령 패스에 배포판의 bin 디렉토리(위 예제에서 /usr/local/maven/bin)를 추가할 필요가 있다. 또한, 설치된 최상위 디렉토리에 M2_HOME 환경변수를 세팅할 필요가 있다. (위 예제에서 /usr/local/maven)

유의
설치 절차는 OS X Tiger와 Leopard 모두 동일하다. Maven 2.0.6은 XCode의 preview 배포판이 탑재되어야 함이 보고되었다. XCode가 설치되었다면, 실행가능한지를 점검하기 위해 명령행에서 mvn 을 실행해보라. XCode는 /usr/share/maven 에 메이븐을 설치한다. Maven 2.0.9가 배포된 이후로 수많은 버그와 향상이 있었기 때문에 Maven 2.0.9의 가장 최근 버전을 설치하기를 권한다.

로그인 할때마다 실행되는 스크립트에 M2_HOME과 PATH 모두를 추가할 필요가 있다. 이렇게 하기 위해서 .bash_login 에 다음의 행들을 추가하라.

export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:${PATH}


일단 위의 행들을 여러분의 환경에 추가했다면, 명령행에서 메이븐을 실행할 수 있을 것이다.

유의
위의 설치 과정은 bash을 실행하고 있다는 것을 가정한다.

2.3.2 MS윈도우에 메이븐 설치

윈도우에 메이븐을 설치하는 것은 Mac OS X에 설치하는 것과 유사하며, 주요 차이는 설치 위치와 환경 변수에 대한 세팅이다. 이 책은 메이븐 설치 디렉토리를 C:\Program Files\maven-2.0.9 라고 가정하지만, 적절한 환경 변수를 설정한다면 다른 디렉토리에 메이븐을 설치하는 것은 별 차이가 없다. 일단 설치 디렉토리에서 Maven 압축을 풀면 PATH와 M2_HOME 두개의 환경 변수를 설정할 필요가 있다. 명령행에서 이 환경 변수를 설정하려면 다음의 명령어를 입력하라.

C:\Users\tobrien > set M2_HOME=c:\Program Files\maven-2.0.9
C:\Users\tobrien > set PATH=%PATH%;%M2_HOME%\bin


명령행에 위의 변수를 세팅하면 현재 세션에서 메이븐을 실행할 수 있지만, 제어판을 통해 시스템 환경 변수를 추가하지 않는 이상 시스템에 로그인 할 때마다 이 두개의 행을 실행해야만 한다. M2_HOME과 PATH 모두가 메이븐 설치를 가리키도록 설정하라.

2.3.3 Linux에 메이븐 설치

메이븐을 리눅스에 설치하려면, 이 책 이전의 2.3.1 소개된 정확한 절차를 따르라.

2.3.4 Free BSD나 OpenBSD에 메이븐 설치

FreeBSD나 OpenBSD에 메이븐을 설치하려면, 이 책 이전의 2.3.1 소개된 정확한 절차를 따르라.

2.4 메이븐 설치 테스트

일단 메이븐이 설치되었으면, 명령행에 mvn –v 를 실행함으로써 설치가 제대로 되었는지를 알아본다. 메이븐이 설치되었다면, 다음의 결과와 같은 내용을 볼 수 있다.

~/examples $ mvn -v
Maven 2.0.9


만일 이러한 내용을 보았다면, 메이븐이 성공적으로 설치되었음을 알 수 있다. 만일 이러한 내용을 보지 못하고 여러분의 OS가 mvn 명령을 찾지 못한다면, PATH와 M2_HOME 환경 변수가 제대로 세팅되었는지를 확인하라.

2.5 메이븐 설치 세부사항

메이븐의 다운로드 크기는 약 1.5 MiB[1]가 된다. 메이븐의 핵심이 요청에 의해 원격 레파지토리에서 플러그인과 의존관계를 받게끔 되어 있기 때문에 그와 같이 다운로드 크기가 줄인 형태로 유진된다. 메이븐을 사용하기 시작할 때 이 책 이후의 2.5.1 절에 설명한 대로 로컬 레파지토리에 플러그인을 다운로드받기 시작할 것이다. 자세한 사항을 알고 싶으면 메이븐의 설치 디렉토리가 어떻게 생겼는지 잠깐 살펴보자.

[1] 200GB 하드 드라이브를 구매했을 때 설치시 200GiB보다 더 적은 용량을 표시된다는 것을 인식한 적이 있는가? 컴퓨터는 Gibibyte를 인식하지만, 판매상은 Gigabyte를 사용해서 물건을 판다. MiB는 Mebibyte의 약자로, 220 즉 10242으로 정의된다. 이러한 이진 접두어 표준은 IEEE, CIPM, IEC에서 승인한다. Kibibyte, Mebibyte, Gibibyte, Tebibyte에 대한 더 많은 정보는 http://en.wikipedia.org/wiki/Mebibyte 를 참조하라.


/usr/local/maven $ ls -p1
LICENSE.txt
NOTICE.txt
README.txt
bin/
boot/
conf/
lib/


LICENSE.txt 는 아파치 메이븐에 대한 소프트웨어 라이센스를 포함한다. 이 라이센스는 이후 2.8절에 좀 더 상세하게 설명한다. NOTICE.txt 는 메이븐이 참조하는 라이브러리가 필요로 하는 몇가지 주의사항과 속성을 포함한다. README.txt 는 설치 내용을 포함한다. bin/ 은 메이븐을 실행하는 mvn 스크립트를 포함한다. boot/ 는 메이븐이 실행하는데 클래스로더를 생성을 담당하는 JAR 파일(classwords-1.1.jar)을 포함한다. conf/ 는 메이븐 설치에 대한 동작을 변경하는데 사용될 수 있는 전역 settings.xml 을 포함한다. 메이븐에 대해 변경할 필요가 있다면, ~/.m2 에 저장된 settings.xml 파일에 세팅을 바꿈으로써 변경이 가능하다. lib/ 는 메이븐의 핵심을 포함하는 단일 JAR 파일(maven-core-2.0.9-uber.jar)을 포함한다.

2.5.1 사용자 지정 설정과 레파지토리

일단 메이븐을 광범위하게 사용하기 시작했다면, 메이븐이 홈 디렉토리에 몇가지 로컬 사용자 지정 설정 파일들과 로컬 레파지토리를 생성한다는 것을 알 수 있다. ~/.m2 에 다음과 같은 것이 있을 것이다.

settings.xml

권한, 레파지토리, 메이븐의 동작을 변경하는 다른 정보들에 대한 사용자 지정 설정을 포함하는 파일

repository/

이 디렉토리는 로컬 메이븐 레파지토리를 포함한다. 원격 메이븐 레파지토리로부터 의존관계를 다운로드받을 때, 로컬 레파지토리에 의존관계의 복사본을 저장한다.

유의
Unix (와 OS X)에서 홈 디렉토리는 ~ (예를 들어, /home/tobrien/bin 를 가리키는 ~/bin)을 사용해서 참조된다. 윈도우에서는 홈 디렉토리에 대한 참조를 위해 ~를 역시 사용한다. 윈도우 XP에서 홈 디렉토리는 C:\Documents and Settings\tobrien 이며, 윈도우 비스타에서 홈디렉토리는 C:\Users\tobrien 이다. 이러한 관점에서 ~/m2 와 같은 경로는 사용자의 OS에 맞게 해석해야 한다.

2.5.2 메이븐 설치 업그레이드

만일 Mac OS X나 유닉스 머신에 2.3.1 절과 2.3.3 절에서 설명한 세부사항에 따라서 설치했다면, 메이븐의 더 새로운 버전이 사용이 가능할 때 업그레이드가 쉽다. 메이븐의 기존 버전 (/usr/local/maven-2.0.9) 다음에 새로운 버전 (/usr/local/maven-2.future)을 설치하면 된다. 그 다음에 /usr/local/maven 의 심볼릭 링크를 /usr/local/maven-2.0.9에서 /usr/local/maven-2.future로 바꾼다. 이미 M2_HOME 변수를 /usr/local/maven로 세팅했기 때문에 어떠한 환경 변수도 바꿀 필요가 없다.
윈도우에 메이븐을 설치했다면, Maven을 c:\Program Files\maven-2.future에 압축을 풀고 M2_HOME 변수를 변경한다.

2.6 Maven에 대한 Help  얻기

이 책은 이해를 위한 참고를 목적으로 하지만, 책에서 빠진 항목과 다루지 않는 특별한 상황과 팁이 있을 수 있다. 메이븐의 핵심은 매우 단순하지만, 메이븐의 실세계는 플러그인에서 발생되며, 책 한권이 모든 플러그인을 담기에는 너무나 많은 플러그인이 있다. 이 책에서 다루지 않는 문제나 기능에 봉착했을 때 다음의 위치에서 답을 찾기를 권한다.

제일 먼저 찾아보아야 하는 곳이다. 메이븐 웹 사이트는 풍부한 정보와 문서를 포함하고 있다. 모든 플러그인은 몇 페이지의 문서를 가지고 있으며, 이 책의 내용 이외에 도움이 될 만한 “quick start” 문서를 제공한다. 메이븐 사이트가 많은 정보를 포함한다고 하더라도, 실망감, 혼란스러움, 중압감을 역시 느낄 수도 있다. 메이븐의 메인 페이지에 있는 구글 검색 박스는 정보에 대해 알려진 메이븐 사이트를 검색해준다. 이것은 일반적인 구글 검색보다 더 좋은 결과를 찾아줄 것이다.

Maven 사용자 메일링 리스트

메이븐 사용자 메일링 리스트는 사용자들이 질문을 하는 장소이다. 사용자 메일링 리스트에 질문을 하기 전에 질문에 관련된 이전 내용이 있는지를 검색하기를 원할 것이다. 이미 기존에 답변이 되었는지를 찾는데 먼저 검색해보지 않고 이미 질문이 된 내용을 질문하는 것은 좋지 않은 방법이다. 수많은 유용한 메일링 리스트 검색 브라우저가 있다. 가장 유용한 것을 Nabble에서 찾았다. http://www.nabble.com/Maven---Users-f178.html 에서 사용자 메일링 리스트 목록을 브라우저로 검색할 수 있다. http://maven.apache.org/mail-lists.html 에서 나타난 대로 사용자 메일링 리스트에 가입할 수 있다.

http://www.sonatype.com/

sonatype은 이 책의 온라인 복사본이 있으며 Apache Maven과 관련된 다른 튜토리얼들이 있다.

유의
몇몇 매우 헌신적인 메이븐 기부자들의 노력에도 불구하구 메이븐 웹 사이트는 엉성하게 구성되어 있으며 불완전한 (어떤 경우에는 잘못된) 문서들이 넘쳐나고 있다. 메이븐 커뮤니티 전반적으로 플러그인 문서에 대한 공통 표준이 부족하다. 어떤 플러그인은 많은 양의 문서를 제공하는 반면에 다른 곳은 사용에 대한 가장 초보적인 내용도 부족하다. 종종 가장 좋은 방법은 사용자 메일링 리스트의 목록에서 해결책을 찾아보는 것이다. 도움을 주기를 정말로 원한다면, 메이븐 사이트(혹은 이 책)에 패치를 제공하라.

2.7 Maven Help 플러그인 사용

이 책을 통해 메이븐 플러그인을 소개하고 메이븐 POM 파일과, 세팅 파일들, 프로필들을 이야기하고 있다. 메이븐이 사용하고 있는 모델들을 이해하는데 도움이 되는 도구를 언제 필요하고 특정 플러그인에 대해 사용 가능한 goal이 무엇이 있는지를 살펴볼 시간을 가질 것이다. Maven Help 플러그인은 사용중인 Maven 프로필들을 목록으로 나타내거나, 효과적인 POM을 보여주거나, 효율적인 세팅을 나타내거나, 메이븐 플러그인의 속성을 보여준다.

유의
POM과 플러그인에 대한 개념적인 개요에 대해서는 3장을 참고하라.

Maven Help 플러그인은 네가지 goal을 가진다. 첫번째 세개의 goal – active-profile, effective-pom, effective-settings - 은 특정 프로젝트에 대한 설명을 나타내고 프로젝트의 기본 디렉토리에서 실행되어야 한다. 마지막 goal – describe - 은 플러그인이나 플러그인의 goal에 대한 정보를 보여주는 약간은 복잡합다. 다음의 명령은 네가지 goal에 대한 일반적인 정보를 제공한다.

help:active-profiles

빌드에 대해 사용 중인 프로필 (project, user, global)을 나열한다.

help:effective-pom

사용 중인 프로필과 함께 현재 빌드에 대한 효과적인 POM을 보여준다.

help:effective-settings

프로필과 전역 세팅을 사용자 수준으로 세팅하는 상속과 같이 프로젝트에 대해 계산된 세팅을 표시한다.

help:describe

플러그인의 속성을 표시한다. 이것은 기존 프로젝트의 디렉토리에서 실행할 필요가 없다. 표시를 원하는 플러그인의 groupId와 artifactId이 최소한 제시되어야 한다.

2.7.1. Maven 플러그인 설명

일단 메이븐을 사용하기 시작하면, 플러그인에 대한 더 많은 정보를 얻기 위해 대부분의 시간을 소비할 것이다. 플러그인이 어떻게 작동하는지? 설정 파라미터가 무엇인지? Goal이 무엇인지? 등에 대한 것들을 알고 싶어할 것이다. help:describe goal은 이러한 정보를 가지고 오기 위해 매우 자주 사용하는 것이다. 플러그인 파라미터와 같이 플러그인 접두사 (예를 들어, help와 같은 maven-help-plugin)이나 groupId:artifact[:version] (version은 선택사항) 중의 하나를 넘기면서 알고자 하는 플러그인을 지정할 수 있다. 예를 들어, 다음의 명령은 Maven Help 플러그인에 대한 정보를 출력하는 Help 플러그인의 describe goal을 사용한 것이다.

$ mvn help:describe -Dplugin=help
...
Group Id:  org.apache.maven.plugins
Artifact Id: maven-help-plugin
Version:     2.0.1
Goal Prefix: help
Description:

The Maven Help plugin provides goals aimed at helping to make sense out of
    the build environment. It includes the ability to view the effective
    POM and settings files, after inheritance and active profiles
    have been applied, as well as a describe a particular plugin goal to give
    usage information.
...


플러그인 파라미터와 같이 describe goal을 실행하면 플러그인에 대한 메이븐의 위치, goal 접두어와, 플러그인에 대한 간략한 내용이 출력된다. 비록 이러한 정보가 도움이 되지만, 보통은 이보다 더 자세한 내용을 찾을 것이다. 만일 Help 플러그인을 통해 파라미터와 같이 goal의 전체 목록을 출력하고자 한다면 다음과 같이 full 파라미터와 같이 help:describe goal을 실행한다.

$ mvn help:describe -Dplugin=help -Dfull
...
Group Id:  org.apache.maven.plugins
Artifact Id: maven-help-plugin
Version:     2.0.1
Goal Prefix: help
Description:

The Maven Help plugin provides goals aimed at helping to make sense out of
    the build environment. It includes the ability to view the effective
    POM and settings files, after inheritance and active profiles have been
    applied, as well as a describe a particular plugin goal to give usage
    information.

Mojos:

===============================================
Goal: 'active-profiles'
===============================================
Description:

Lists the profiles which are currently active for this build.

Implementation: org.apache.maven.plugins.help.ActiveProfilesMojo
Language: java

Parameters:
-----------------------------------------------

[0] Name: output
Type: java.io.File
Required: false
Directly editable: true
Description:

This is an optional parameter for a file destination for the output of
this mojo...the listing of active profiles per project.

-----------------------------------------------

[1] Name: projects
Type: java.util.List
Required: true
Directly editable: false
Description:

This is the list of projects currently slated to be built by Maven.

-----------------------------------------------

This mojo doesn't have any component requirements.
===============================================

... remove the other goals ...

위의 옵션은 모든 플러그인의 goal 뿐만 아니라 이들의 파라미터를 찾는데 좋다. 하지만 때로 이것은 필요한 것보다 더 많은 정보를 보여준다. 단일 goal에 대한 정보를 얻기 위해 mojo 파라미터 뿐만 아니라 플러그인 파라미터를 세팅한다. 다음 명령은 Compiler 플러그인의 compile goal에 대한 모든 정보를 열거한다.

$ mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull

유의
Mojo란 무엇인가? 메이븐에서 플러그인 goal이 Mojo로 알려져있다.

2.8 Apache 소프트웨어 라이선스에 대해

아파치 메이븐은 아파치 라이선스 버전 2.0 하에서 배포된다. 이 라이선스를 읽기 원한다면, ${M2_HOME}/LICENSE.txt 를 보거나 http://www.opensource.org/licenses/apache2.0.php 의 오픈 소스 촉진 기구의 웹 사이트에서 찾아볼 수 있다.
이 책을 읽고 있다면 법률가가 아니더라도 좋은 기회이다. 만일 아파치 라이선스 버전 2.0이 무엇을 의미하는지를 궁금하다면 아파치 소프트웨어 재단이 매우 도움이 되는 내용을 http://www.apache.org/foundation/licence-FAQ.html 의 라이선스 관련 FAQ를 모아두었다. 다음은 FAQ에서 “저는 법률가가 아닙니다. 모두 무엇을 의미합니까” 라는 질문에 대한 답변이다.


<<Pre  Next>>


Creative Commons License
Elvis Lee에 의해 창작된 메이븐 가이드 은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스에 따라 이용할 수 있습니다.
www.sonatype.com의 저작물에 기초

반응형

'Homo Faber > Maven Definitive Guide' 카테고리의 다른 글

3장. 간단한 Maven 프로젝트  (0) 2008.10.29
I부. 메이븐 예제  (0) 2008.10.29
1장. 아파치 메이븐 소개  (0) 2008.10.28
서문  (0) 2008.10.28
Maven : Build Success for your Enterprise  (0) 2008.10.28