[Spring] 2 - Maven
by me
목차
- Maven의 기본 정의 이해
- Maven의 프로젝트 관리 방법 이해
- Maven의 빌드 자동화 기능을 이해
Maven
Maven 이란?
- 프로젝트를 관리하는 도구
- 빌드 자동화 기능과 프로젝트 관리 기능을 제공
- 소프트웨어 빌드를 위한 공통 인터페이스를 제공하는 프레임워크
- 플러그인 설정을 통해 기능을 위임
프로젝트(라이브러리) 관리 란?
- pom.xml 파일을 이용하여 프로젝트 관련된 jar 파일을 다운로드하고 관리
- 프로젝트 산출물을 일관된 구조로 관리
프로젝트 관리 기능
- 일반 개발자 프로젝트 관리 설정들을 메이븐이 미리 정의한 설정들로 대체한다
- 정형화된 프로젝트 디렉토리 구조 관리 (pom.xml)
- Convention over Configuration(CoC) 패러다임을 따름 : 설정보다는 규범
- 의존성 관리기능
- 편리한 라이브러리 관리 기능 (pom.xml, Repositorty)
- 의존관계(라이브러리) 설정 (pom.xml)
- 프로젝트 당 한 개의 pom.xml 파일 관리
- 최상위 엘리먼트(root element) : project
- 3개의 필수 필드를 가짐(groupId: artifactId: version)
- groupId : 프로젝트 조직 고유 도메인
- artifactId : 프로젝트 명
- version : 프로젝트 버전
- 프로젝트 의존관계의 라이브러리 관리 : dependency
- 프로젝트 빌드 에 필요한 라이브러리, 플러그인을 개발자 PC에 자동으로 다운로드
- 프로젝트 빌드 설정
- 프로젝트 기본 정보, 저장소, 프로퍼티, 디렉토리 구조
- 플러그인(plugins)
- 골(goals)
- 프로젝트 빌드 설정
- 의존관계(라이브러리) 설정 (pom.xml)
- Maven Repository
- 메이븐 저장소는 프로젝트에 사용되는 프로젝트 jar 파일, 라이브러리 jar 파일들이 위치하며 3가지 타입이 있다
- 중앙(central) 저장소
- 오픈 소스 라이브러리, 메이븐 플러그인, 메이븐 아키타입을 관리하는 저장소이다.
- 중앙 저장소는 (https://repo.maven.apache.org/maven2), (http://search.maven.org/), (http://mvnrepository.com/) 이 있다.
- 로컬(local) 저장소
- 로컬 저장소는 메이븐을 빌드할 때 다운로드하는 라이브러리, 플러그인을 관리하는 저장소이다. 기본 로컬 저장소는 USER_HOME/.m2/repository 디렉토리이다.
- 원격(remote) 저장소
- 메이븐 기반으로 프로젝트를 진행하는 경우 프로젝트에 필요한 모든 라이브러리가 메이븐 중앙 저장소에 존재하는 것이 아니다. 이처럼 중앙 저장소에 존재하지 않는 라이브러리를 관리하기 위하여 별도의 메이븐 저장소를 설치해 관리하는 것이 가능하다.
- 메이븐 의존성 검색 절차(Maven Dependency Search Sequence)
- 지역(local) 저장소 를 검색한다. 찾는 라이브러리가 없을 경우 2단계로 넘어간다.
- 중앙(central) 저장소 를 검색한다. 찾은 라이브러리는 지역 저장소에 저장한다. 만약 찾는 라이브러리가 없을 경우 3단계로 넘어간다. 만약 원격 저장소가 존재 하지 않을 경우 에러를 발생시키고 종료한다.
- 원격(remote) 저장소 를 검색한다. 찾은 라이브러리는 지역 저장소에 저장한다. 만약 찾는 라이브러리가 없을 경우 에러를 발생시키고 종료한다.
- 의존 라이브러리 적용 스코프
- 편리한 라이브러리 관리 기능 (pom.xml, Repositorty)
- 빌드 프로세스를 관리 (pom.xml)
빌드 자동화 란?
- 빌드 작업들을 간단하고 쉽게 그리고 일관성 있게 수행할 수 있는 통합 환경을 제공
- 빌드는 소스 코드 파일을 실행 코드로 변환하여 배포하는 과정
- 빌드 단계 (컴파일, 테스트, 패키징, 배포)들을 빌드 라이프 사이클 이라고 한다.
- 각 빌드 단계에서 수행되는 작업을 골(Goal) 이라고 한다.
- Maven 빌드 라이프사이클(lifecycle)
- Maven Phase & Goal
- Maven Plugin
- 대부분의 기능들은 플러그인 을 통해서 제공된다.
- 예) maven-compiler-plugin, maven-clean-plugin, maven-surefire-plugin
관련된 Post
References
- 대학교 웹 프레임워크 수업 정리한 내용 입니다.