플러그인을 기반으로 소스 코드로부터 배포 가능한 산출물을 만들어 내는 빌드 기능 뿐만 아니라 레포팅 및 documentation 작성 기능 등을 제공한다.
>>내가 사용할 라이브러리 뿐만아니라 해당 라이브러리가 작동하는데 필요한 라이브러리들도 자동으로 받아줌
장점
• 뛰어난 의존성 관리
- 의존성 자동 업데이트
- 저장소를 통한 라이브리 일괄 관리
• 모든 프로젝트에 걸쳐 쉽게 적용 가능한 일관적인 사용법
• 라이브러리 및 메타 데이터 저장을 위한 지속적으로 확장 되고 있는 저장소
• 쉽게 작성 가능한 플러그 인을 통한 확장성
• 동시에 다수의 프로젝트 핸들링 할 수 있는 쉬운 설정 기반의 메커니즘
• 간단한 설정을 통한 배포 관리
• Java, C++ 등 다수의 프로그래밍 언어 지원
- 의존성 자동 업데이트
- 저장소를 통한 라이브리 일괄 관리
• 모든 프로젝트에 걸쳐 쉽게 적용 가능한 일관적인 사용법
• 라이브러리 및 메타 데이터 저장을 위한 지속적으로 확장 되고 있는 저장소
• 쉽게 작성 가능한 플러그 인을 통한 확장성
• 동시에 다수의 프로젝트 핸들링 할 수 있는 쉬운 설정 기반의 메커니즘
• 간단한 설정을 통한 배포 관리
• Java, C++ 등 다수의 프로그래밍 언어 지원
단점
• Repository 관리의 불편함
- Maven 프로젝트의 급속한 발전으로 central repository가 제공하는 라이브러리들이 빠르게 증가하고 있으나 아직 3rd 파티 라이브러 등 미제공 라이브러리들이 있음
• pom.xml 파일 관리
- 메이븐 프로젝트 관리에 대한 모든 내용이 pom.xml 파일에 담기게 되믄로 길고 장황하게 될 수 있음
• 프로젝트에 특화된 복잡한 빌드 기능 제약
- 메이븐 프로젝트 특성상 소프트웨어 빌드에 통용되는 라이프 사이클을 제공하고 있어 세부 항목 또는 특화된 빌드 환경에 대한 지원이 미약함
- Maven 프로젝트의 급속한 발전으로 central repository가 제공하는 라이브러리들이 빠르게 증가하고 있으나 아직 3rd 파티 라이브러 등 미제공 라이브러리들이 있음
• pom.xml 파일 관리
- 메이븐 프로젝트 관리에 대한 모든 내용이 pom.xml 파일에 담기게 되믄로 길고 장황하게 될 수 있음
• 프로젝트에 특화된 복잡한 빌드 기능 제약
- 메이븐 프로젝트 특성상 소프트웨어 빌드에 통용되는 라이프 사이클을 제공하고 있어 세부 항목 또는 특화된 빌드 환경에 대한 지원이 미약함
pom.xml(Project Object Model)
프로젝트 정보, 빌드 설정, 빌드 환경 등 프로젝트 라이브러리의 의존관계 관리하는 프로젝트 정보 기술.
<scope>
compile : 컴파일 할때 필요. 테스트 및 런타임에도 클래스 패스에 포함 된다. scorp 을 설정 하지 않는 경우 기본값이다.
runtime : 런타임에 필요. JDBC 드라이버 등이 예가 된다. 컴파일 시에는 필요하지 않지만, 실행 시에 필요한 경우.
provided : 컴파일 시에 필요하지만, 실제 런타임 때에는 컨테이너 같은 것에서 제공되는 모듈. servlet, jsp api 등이 이에 해당. 배포시 제외된다.
test : 테스트 코드를 컴파일 할때 필요. 테스트시 클래스 패스에 포함되며, 배포시 제외된다
runtime : 런타임에 필요. JDBC 드라이버 등이 예가 된다. 컴파일 시에는 필요하지 않지만, 실행 시에 필요한 경우.
provided : 컴파일 시에 필요하지만, 실제 런타임 때에는 컨테이너 같은 것에서 제공되는 모듈. servlet, jsp api 등이 이에 해당. 배포시 제외된다.
test : 테스트 코드를 컴파일 할때 필요. 테스트시 클래스 패스에 포함되며, 배포시 제외된다