4. Maven 메뉴얼
<3>
1. 도구 개요
1.1 도구 개요
구분 내용
소개
메이븐은 아파치 소프트웨어 재단의 최상급 오픈 소스 프로젝트이며 원래는 자카르타 터빈(Jakarta Turbine) 프로젝트의 복잡한 빌
드 과정을 관리하기 위해 만들어졌다. 현재 버전 3까지 나오면서 메이븐은 단일 팀 프로젝트에 최적화된 빌드 도구에서 대부분의 소
프트웨어 개발 시나리오에 꼭 필요한 범용 빌드 관리 시스템까지 다양하게 사용하고 있다
라이센스 The Apache Software License, Version 2.0
사용환경 운영체제 : Platform Independent
공식 홈페이지 http://maven.apache.org
주요기능
의존성 관리
원격 레파지토리
빌드 로직에 대한 보편적인 재사용
도구 이식성과 통합
쉬운 검색과 프로젝트 산출물 필터링
7. Maven 메뉴얼
<6>
1.4POM파일구조[1/3]
POM은 프로젝트의 구조와 내용을 설명하고 있으며 pom.xml 파일에 프로젝트 관리 및 빌드에 필요한 환경 설정, 의존성 관리 등의 정보
들을 기술한다.
프로젝트의 세부 메타 데이터 정보를 포함한다.
1.도구개요
• Project Information : 프로젝트 이름, 프로젝트 URL, 프로젝트에 참여하는 개발자 목록, 프로젝트의 라이선스 같은 기본적인 정보를
관리한다.
• Build Settings : 메이븐 빌드와 관련한 기본적인 빌드 설정을 변경하기 위한 카테고리이다.
• POM Relationships : 대부분의 프로젝트는 다른 라이브러리 또는 프로젝트와 의존 관계를 가지며, 각 프로젝트 사이에서 상속 관계
를 가지는 경우도 있다. 이런 경우 각 프로젝트의 관계를 관리하는 부분이다.
• Build Environment : 모든 프로젝트는 다양한 환경에 배포하는 것이 가능해야 한다. 환경에 따라 변경되는 부분이 발생하는데, 이와
같이 다양한 환경에 따라 다른 설정 정보를 관리하는 것이 이 카테고리이다.
8. Maven 메뉴얼
<7>
1.4POM파일구조[2/3]
pom.xml 설정파일의 주요 엘리먼트를 설명한다.
프로젝트의 세부 메타 데이터 정보를 포함한다.
1.도구개요
• project : pom.xml 파일의 최상위 엘리먼트
• modelVersion : POM 모델의 버전. 가장 최근 버전이 4.0.0이다. POM 모델이 변경되지 않으면 수정할 필요가 없다.
• groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 사용한다.
• artifactId : 프로젝트를 식별하는 유일한 아이디를 의미한다. 예를 들어 net.pinsit라는 groupId를 사용하고 있는 조직에 여러 개의 프
로젝트가 있을 수 있다.
• packaging : 프로젝트를 어떤 형태로 패키징할지 결정한다. jar, war, ear, pom 등이 해당된다.
• version : 프로젝트의 현재 버전이다. 개발이 완료된 버전일 경우 1.0, 2.0과 같이 사용하겠지만, 프로젝트 개발 중에는 SNAPSHOT
을 접미사로 사용할 수 있다. SNAPSHOT은 메이븐의 예약어이며, SNAPSHOT을 사용하면 라이브러리를 다른 방식으로 관리한다.
• name : 프로젝트 이름
• url : 프로젝트 사이트가 있으면 사이트 URL을 등록한다.
• dependencies : <dependencies/>엘리먼트와 하위 엘리먼트인 <dependency/>는 프로젝트와 의존 관계에 있는 라이브러리를 관리
한다.
9. Maven 메뉴얼
<8>
1.4POM파일구조[3/3]
POM파일의 전체적인 구조는 분량이 많은 관계로 실제 내용은 POM의 스키마를 참조하기 바란다.
현재 사용되는 POM 4.0의 스키마는 http://maven.apache.org/maven-v4_0_0.xsd를 참조하기 바란다.
스키마를 보면 전체적인 구조를 이해할 수 있다.
1.도구개요
11. Maven 메뉴얼
<10>
2.1도구다운로드[1/4]
메이븐 공식 홈페이지 [http://maven.apache.org] 에서 OS에 맞는 설치파일을 다운로드 받습니다.
브라우저 주소 창에 주소를 입력하고 메이븐 홈페이지로 이동한 후 다운로드를 위해서 다운로드 페이지로 이동한다
2.도구설치방법
1
22. Maven 메뉴얼
<21>
3. 도구 기능 소개
3.1 아키타입 생성
3.2 이클립스용 프로젝트로 변환
3.3 아키타입 테스트
3.4 패키지 생성
23. Maven 메뉴얼
<22>
3.1아키타입생성[1/2]
메이븐의 아키타입은 프로젝트의 기본 구조를 생성해주는 기능이다.
아키타입을 생성하는 명령을 입력하여 아키타입을 생성한다.
• 커맨드 명령 : mvn archetype:generate –DarchetypeCatalog=internal
• 커맨드 라인에서 입력하면 메이븐의 내부 카테고리의 아키타입을 출력한다(아래 화면 참고).
• 원하는 아키타입을 선택하여 프로젝트를 생성한다
• 이 문서에서는 maven-archetype-webapp 프로젝트를 생성한다
3.도구기능소개
25. Maven 메뉴얼
<24>
3.2이클립스용프로젝트로변환[1/5]
생성한 아키타입 프로젝트를 이클립스용 프로젝트로 변환한다.
메이븐으로 생성한 프로젝트를 이클립스에서 사용하기 위해 설정을 추가한다
• 커맨드 명령 : mvn eclipse:clean eclipse:eclipse
• 앞의 eclipse:clean 명령은 이클립스용으로 만들어지는 파일을 삭제하는 명령이다
• 만약에 이클립스용 WTP(Web Tools Platform)프로젝트의 생성을 위해서는 아래와 같은 플러그인을 추가한다
3.도구기능소개
33. Maven 메뉴얼
<32>
4.1프로퍼티추가
pom.xml에서 사용하는 프로퍼티의 내용을 추가한다.
기존에 생성된 프로퍼티의 항목을 설명하는 것으로 프로퍼티를 설명한다
4.도구사용예제
• pom.xml에 <properties></properties>를 추가하고 사용할 프로퍼티를 추가한다.
• 사용할 프로퍼티명을 <>태그 사이에 입력하고 시작/종료태그 사이에 value를 입력한다.
• pins-core에서 사용한 프로퍼티를 설명한다.
– <java.version>1.6</java.version> : 자바 버전을 1.6으로 설정
– <project.build.sourceEncoding>UTF-8<project.build.sourceEncoding> : pom프로젝트의 Build부분의 인코딩을 UTF-8로 설정
– <spring.version>3.0.5.RELEASE</spring.version> : 스프링의 공통 버전을 3.0.5.RELEASE로 사용하기 위해 추가
– <slf4j.version>1.6.2</slf4j.version> : slf4j의 버전을 1.6.2로 사용하기 위해 추가
– <aspectj.version>1.6.11</aspectj.version> : aspectJ의 버전을 1.6.11로 사용하기 위해 추가
34. Maven 메뉴얼
<33>
4.2라이브러리추가
pom.xml에서 사용할 라이브러리를 추가한다.
프로젝트에서 사용할 라이브러리를 추가하는 것으로 여기서는 스프링 프레임워크를 추가한 부분만 설명한다.
4.도구사용예제
• pom.xml에 <dependencies></dependencies>사이에 사용을 원하는 라이브러리를 추가하면 됩니다.
• 라이브러리에 검색은 maven의 라이브러리 검색엔진들을 참고하시기 바랍니다 [http://mvnrepository.com]
• 라이브러리는 <dependency>라는 태그안에 groupId, artifactId, version을 명시하여 추가합니다
• 사용 예제는 아래와 같이 하여 라이브러리를 추가할 수 있습니다
35. Maven 메뉴얼
<34>
4.3플러그인추가
pom.xml에서 사용할 플러그인을 추가한다.
프로젝트에서 사용할 플로그인을 사용하는 부분으로 여기서는 컴파일러의 버전과 인코딩 설정을 설명한다.
4.도구사용예제
• pom.xml에 <build></build>사이에 <plugins></plugins>사이에 사용을 원하는 플러그인을 추가하면 됩니다.
• 각각의 플러그인에 대한 설정법은 메이븐 공식 홈페이지 [http://maven.apache.org]를 참고하여 설정한다.
• 각 플러그인 마다 설정 방법이 다르기 때문에 여기서는 compiler플러그인에 대한 설정을 설명한다.
• <source></source>는 소스 코드의 자바 버전을 의미한다
• <target></target>은 컴파일 된 자바 클래스의 자바 버전을 의미한다.
• <encoding></encoding>은 사용하는 인코딩 언어를 의미한다
• 설정의 상세 항목은 아래와 같다.
37. Maven 메뉴얼
<36>
문서에 사용한 참고자료
5.참고자료
• 제12회 한국자바개발자 컨퍼런스의 박재성님의 Apache Maven문서 참고
– URL : http://www.jco.or.kr/c?mc=conference&sc=pds&pdsPage=12
• 한빛미디어 : 자바세상의 빌드를 이끄는 메이븐 (저자 박재성) 참고
– POM의 구조에 대해서 3장의 pom관련 참고