===== 개요 ===== 메이븐은 프로젝트 객체 모델(Project Object Model)이라는 개념을 바탕으로 프로젝트 의존성 관리, 라이브러리 관리, 프로젝트 생명 주기 관리 기능 등을 제공하는 **프로젝트 관리 도구**이다. 또한 플러그인을 기반으로 소스 코드로부터 배포 가능한 산출물을 만들어 내는 **빌드 기능** 뿐만 아니라 레포팅 및 documentation 작성 기능 등을 제공한다. ===== 설명 ===== ==== Maven 특징 ==== ^Maven 장점 ^Maven 단점 ^ | • 뛰어난 의존성 관리 \\ - 의존성 자동 업데이트 \\ -저장소를 통한 라이브리 일괄 관리 \\ \\ • 모든 프로젝트에 걸쳐 쉽게 적용 가능한 일관적인 사용법 \\ \\ • 라이브러리 및 메타 데이터 저장을 위한 지속적으로 확장 되고 있는 저장소 \\ \\ • 쉽게 작성 가능한 플러그 인을 통한 확장성 \\ \\ • 동시에 다수의 프로젝트 핸들링 할 수 있는 쉬운 설정 기반의 메커니즘 \\ \\ • 간단한 설정을 통한 배포 관리 \\ \\ • Java, C++ 등 다수의 프로그래밍 언어 지원 | • Repository 관리의 불편함 \\ - Maven 프로젝트의 급속한 발전으로 central repository가 제공하는 라이브러리들이 \\ 빠르게 증가하고 있으나 아직 3rd 파티 라이브러 등 미제공 라이브러리들이 있음 \\ \\ • pom.xml 파일 관리 \\ - 메이븐 프로젝트 관리에 대한 모든 내용이 \\ pom.xml 파일에 담기게 되믄로 길고 장황하게 될 수 있음 \\ \\ • 프로젝트에 특화된 복잡한 빌드 기능 제약 \\ - 메이븐 프로젝트 특성상 소프트웨어 빌드에 통용되는 \\ 라이프 사이클을 제공하고 있어 세부 항목 또는 특화된 빌드 환경에 대한 지원이 미약함| ==== Maven 아키텍처 ==== Maven은 프로젝트 전체 내용에 대한 기술 및 설정을 담당하는 POM과 라이브러리(Maven에서는 artifact라 호칭함)관리에 대한 dependency/repository 관리 모델 그리고 컴파일, 테스트, 패키징 등의 빌드 생명 주기를 다루는 lifecycle 및 관련된 plugin들과의 연동을 다루는 부분으로 구성된다. {{:egovframework:dev2:dep:build:mvn-arch1.gif|}} | 프로젝트 객체 모델: | 메이븐 엔진 내장 + POM.XML 파일에서 선언적으로 제공 | | 종속성 관리 모델: | 로컬 및 리모트 저장소를 이용 | | 프로젝트 생명 주기 모듈: | 메이븐 엔진은 플러그인을 통해 파일을 다루는 거의 모든 작업을 수행 | ===== 참고자료 ==== [[http://maven.apache.org/|아파치 메이븐 프로젝트]]