목차
- 개요
- 설명
- Maven 특징
- Maven 아키텍처
- 프로젝트 객체 모델 (POM)
- 메이븐 Repository
- 메이븐 디렉터리 구조
- 메이븐 기본 생명 주기
- 메이븐 플러그인
- 메이븐 의존성 관리
- 환경 설정
- 사용법
- 메이븐 프로젝트 생성
- M2Eclipse 메이븐 명령
- 메이븐 기본 lifecycle 명령 실행
- 메이븐 프로젝트 실행
- 샘플
- 참고자료
Maven 장점 | Maven 단점 |
• 뛰어난 의존성 관리 | • Repository 관리의 불편함 |
Maven은 프로젝트 전체 내용에 대한 기술 및 설정을 담당하는 POM과 라이브러리(Maven에서는 artifact라 호칭함)관리에 대한
dependency/repository 관리 모델 그리고 컴파일, 테스트, 패키징 등의 빌드 생명 주기를 다루는 lifecycle 및
관련된 plugin들과의 연동을 다루는 부분으로 구성된다.
프로젝트 객체 모델: | 메이븐 엔진 내장 + POM.XML 파일에서 선언적으로 제공 |
종속성 관리 모델: | 로컬 및 리모트 저장소를 이용 |
프로젝트 생명 주기 모듈: | 메이븐 엔진은 플러그인을 통해 파일을 다루는 거의 모든 작업을 수행 |
POM은 프로젝트의 구조와 내용을 설명하고 있으며 pom.xml 파일에 프로젝트 관리 및 빌드에 필요한 환경 설정, 의존성 관리 등의 정보들을 기술한다.
- 버전 및 설정 관리, 빌드 환경, 라이브러리 저장소 및 의존성 등
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.0http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>egovframework.dev.com</groupId>
<artifactId>egovframework-dev-com</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<name>egovframework-dev-com Maven Webapp</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
</dependencies>
<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></project>
1. Maven 설치 시 로컬에 Maven artifact들을 저장하고 관리하는 repository가 자동으로 구성된다.
- 기본 설정은 C:\Documents and Settings\Administrator\.m2\repository 디렉토리에 구성된다.
- Maven에서 제공하는 central respositoty와 각 기업 또는 organization에서 제공하고 있는 리모트 repository들이 있으며
개발자는 환경 설정을 통해 하나 이상의 외부 repository에서 필요로 하는 artifact들을 다운로드 받아 사용할 수 있다.
- 일반적인 개발 시에 주로 사용되는 라이브러리 관리 메커니즘은 필요로 하는 라이브러리를 프로젝트 내부 디렉터리에 담고
path 설정을 통해 사용하고 있으나 Maven에서는 의존성 설정 메커니즘(라이브러리를 설정 파일에 선언하여 사용함) 통해 사용하고
3.2 개발자 로컬 리포지토리에서 선언한 라이브러리 검색
- 로컬 리포지토리는 리모트 리포지토리에서 검색된 artifact를 내려 받아 저장한다.
- 로컬 repository : artifact들을 로컬 파일 시스템에 cache하는 기능으로 원격 repository에서 다운로드 받아 artifact들을 저장하고 관리한다.
- 원격 repository : 주로 HTTP 서버로 3rd 파티에서 제공하는 artifact들을 제외한 거의 모든 artifact들을 제공한다.
Maven 프로젝트는 개발자에 의한 특정한 source/resource path 설정 없이 정규화된 디렉토리 구조를 기반으로 한
프로젝트 자원에 대한 접근 메커니즘을 제공한다. Maven은 소스 또는 리소스에 대한 path 설정이 필요하지 않다.
메이븐
빌드는
소프트웨어
프로젝트의
핵심적인
빌드
라이프
사이클
개념을
따르고
있으며
빌드
초기화
단계부터
artifact의
배포까지의
생명
주기를
정의하고
있다.
Maven 생명 주기 단계는 각각의 플러그인과 바인딩 되어 실제로 바인딩 된 플러그인이 명령을 실행 하며 단계 순서에 따라 순차적으로 빌드가 실행되어
예) 자바 컴파일: $mvn complile 명령을 실행한다.
메이븐2 기본 생명주기 단계
생명주기 단계 | 설명 |
validate | 현재 설정과 POM의 내용이 유효한지 확인한다. 이 과정은 POM.XML 파일 트리 구조를 검증한다. |
initialize | 빌드 사이클에서 수행할 주요 작업 이전에 초기화를 할 수 있는 순간 |
generate-sources | 코드 생성기가 이 다음의 단계들에서 컴파일 되고 처리할 소스 코드를 생성하기 시작하는 순간 |
process-sources | 소스의 파싱, 수정, 변경을 제공한다. 일반 코드 또는 생성된 코드 모두 여기서 처리한다. |
generate-resources | 소스 코드가 아닌 리소스를 생성하는 단계. 보통 메타데이터 파일과 설정 파일을 포함한다. |
process-resources | 이전 과정의 소스 코드가 아닌 리소스 파일들을 다룬다. 이 단계에서 리소스 파일들이 수정, 변경 재배치 된다. |
compile | 소스 코드를 컴파일한다. 컴파일된 클래스들은 카깃 디렉터리 트리 구조에에 저장된다. |
process-classes | 클래스 파일 변환과 개선 단계를 다룬다. 바이트 코드 위버(weaver)와 instrument 도구가 동작하는 단계다. |
generate-test-sources | 단위 테스트 코드를 생성하는 모조가 동작하는 순간 |
process-test-sources | 컴파일하기 전에 테스트 소스 코드에 필요한 작업을 수행한다. 이 단계에서 소스 코드는 수정, 변환 또는 복사될 수 있다. |
generate-test-resources | 테스트 관련 리소스 생성을 허용한다. |
process-test-resources | 테스트 관련 리소소의 처리, 변환, 재배치가 가능하다. |
test-compile | 단위 테스트 소스 코드를 컴파일한다. |
test | 컴파일된 단위 테스트를 싱행하고 그 결과를 표시한다. |
package | 실행 가능한 바이너리 파일들을 JAR나 WAR 같은 배포용 압축 파일로 묶는다. |
pre-integration-test | 통합 테스트를 준비한다. 이 경우 통합 테스트는 실제 배치 환경의 코드를 테스트 하는 것을 말한다. 이 단계에서 위에서 묶은 압축 파일을 서버에 배치할 수 있다. |
integration-test | 실제 통합 테스트를 수행한다. |
post-integration-test | 통합 테스트 준비 상태를 해제한다. 이것은 테스트 환경의 리셋 또는 재초기화 과정을 포함할 수 있다. |
verify | 배치 가능한 압축 파일의 무결성과 유효성을 검증한다. 이 과정 이후에 압축 파일들이 설치 된다. |
install | 압축 파일을 로컬 메이븐 디렉터리에 추가한다. 이로 인해 이것에 의존하는 다른 모듈들을 사용할 수 있게 된다. |
deploy | 압축 파일을 원격 메이븐 디렉터리에 추가한다. 더 많은 사용자들이 이 artifact를 사용할 수 있게 된다. |
메이븐은
대부분의
빌드
작업
시에
플러그인을
활용하며
메이븐
엔진이
생명주기
단계들과
플러그인을
바인딩
시켜
빌드
작업을
컨트롤
한다.
Maven 플러그인
메트릭스에서
활용
가능한
플러그인들을
확인
할
수
있다.
메이븐은 POM에서
선언적인 dependency 설정으로
빌드
및
배포
시에
필요한
라이브러리들을
관리하고
로컬
및
원격
저장소에서
선언된
라이브러리들을
다운로드
받아
사용한다.
메이븐의 가장 큰 장점 중의 하나로 라이브러리 의존성 관리를 들 수 있다. 일반적인 프로젝트 수행 시 개발자들은 라이브러리 설정을 위해 프로젝트 내부 디렉터리에
직접 라이브러리를 받아와 위치 시키고 path 설정을 통해 이를 이용한다. 이럴 경우 개발자들이 직접 라이브러리를 찾고 설정하는 번거로움과 프로젝트 내부에서 사용하는
라이브러리 종류와 버전을 컨트롤 하는데 문제가 발생할 수 있다. 특히 통합 빌드 과정에서 라이브러리 관련 문제들이 빈번히 발생할 수 있다. 메이븐은 이를 효과적으로
처리하기 위해 의존성 관리 메커니즘을 제공하고 있으며 메이븐 개발자들은 프로젝트의 pom.xml에 dependency 선언만으로 필요한 라이브러리들을 받아와 편하게 사용할 수
있다. 프로젝트 관리자의 경우 사용되고 있는 라이브러리와 버전을 효과적으로 컨트롤할 수 있으며 개발자들에게 검증되고 통일된 버전의 라이브러리를 제공할 수 있다.
예) 아래와 같이 선언하여 junit 테스트를 위한 라이브러리를 사용할 수 있다.
<artifactId>junit</artifactId>
전자정부
개발
프레임워크의
개발환경 IDE에
메이븐
통합
플러그인인 m2eclipse가
설치되어
있다.
구현
도구의 IDE 참조: IDE
1. Maven 설정 파일 세팅
전자정부 표준 프레임워크 개발 환경에서 제공하는 Maven 설정 파일인 **settings.xml** 파일을 지정된 위치에 옮겨 놓는다.
- 디렉터리 위치: C:\Documents and Settings\Administrator\.m2
2. 이클립스 Preferences의 Maven 항목에서 settings.xml 파일의
위치를
설정한다.
3. 전자정부 표준 프레임워크 Archetype 설정 파일 세팅
전자정부 표준 프레임워크 개발 환경에서 제공하는 Maven Archetype 설정 파일인 **archetype-catalog.xml** 파일을 지정된 위치에 옮겨 놓는다.
- 디렉터리 위치: C:\Documents and Settings\Administrator\.m2
4. 이클립스 Preferences의 Maven 항목을 클릭 후 Archetype 메뉴에서 전자정부 표준프레임워크 Archetype을 추가한다.
전자정부 표준 프레임워크의 archetype-catalog.xml파일의 위치를 추가한다.
전자정부 표준 프레임워크 개발환경에서는 Maven 프로젝트를 생성하기 위한 2가지 방법을 제공하고 있으며 eGovFramework perspective에서
제공하는 프로젝트 생성 방법은 개발 환경 IDE 메뉴얼에서 확인할 수 있다. 여기서는 Maven Archetype을 하용한 Maven 프로젝트 생성 방법을 가이드 한다.
1. 웹
어플리케이션을
만들기
위해
메뉴에서 New → Maven Project 를
선택한다.
2. 웹
프로젝트
생성
화면에서 Project name 입력
필드에 groupId 및 artifactId를
설정한다.
4. 생성한
메이븐
웹
프로젝트의
디렉터리
구조를
확인한다.
생성한 메이븐 프로젝트에서 오른쪽 마우스 클릭 후 maven 메뉴를 선택하면 m2eclipse에서 제공하는 기본적인 메이븐 명령어들을 수행할 수 있습니다.
예)'Update Dependencies' 명령을
선택하면 pom.xml에서
선언한
의존성
관련
설정들을 update합니다.
* SCM에서
메이븐
프로젝트를 check out 받은
후 Maven → Update Project Configuration 명령을
통해 check out 받은
메이븐
프로젝트의
환경
및 dependencies를
로컬
환경에
맞게
업데이트
시켜줍니다.
메이븐의 기본 빌드 생명 주기 명령어를 Run As 메뉴에서 실행할 수 있으며 'Maven build…' 명령어 선택을 통해 직접 빌드 Goal을 정의할 수 있다.
Run AS → clean install 명령으로
메이븐
웹
프로젝트를
패키징한
후 Run On Server 명령으로
웹
프로젝트를
실행한다.
개발 환경에서는 가이드 프로그램으로 egovframework.guideprogram.basicsmaple 프로젝트를 제공하고 있다.
임베디드 DB인 HSQL DB를 제공하고 있으며 runHsqlDB.bat 파일을 실행
DB 기동
2. 가이드 프로그램 basic sample
2.1 basic sample 기본 디렉터리 구조
이클립스에서 import project로 basic sample 프로젝트를 가져온 후 m2 maven -> update project configuration 실행한다.
Run As -> clean / Run As -> install 명령을 실행시켜 basic sample 프로젝트 빌드 작업 및 패키징 작업을 수행한다.
2.2 basic smaple 기동
'IT노트 > Maven' 카테고리의 다른 글
Maven 빌드 시 오류. (0) | 2015.03.07 |
---|---|
MAVEN 핵심 개념 정리 자료 (0) | 2015.02.02 |
[Maven+Spring] Eclipse Web Project 생성 1 - new project 생성JSP/Servlet (0) | 2015.02.02 |