프로그래밍 노트/빌드도구

[Maven] 메이븐(Maven) POM 구조의 이해

깡냉쓰 2018. 6. 14. 13:22
728x90
반응형

POM 구조 이해

메이븐은 프로젝트 객체 모델(Project Object Model)이라는 개념을 바탕으로 프로젝트 의존성 관리, 라이브러리 관리, 프로젝트 생명 주기 관리 기능 등을 제공하는 프로젝트 관리 도구이다.

다른 빌드 도구와는 다르게 선언적 접근 방법(Declarative Approach)를 사용한다. 빌드 프로세스를 이벤트 단위로 기술하는 것이 아니라, 프로젝트를 설명하고 프로젝트 구조에 대해서 정의하고 이와 관련된 연관 정보들을 기술하는 형태를 가지고 있다.


pom.xml 에 들어가는 정보내용

기본정보 

프로젝트 정의(컨텍스트와 아티팩트를 정의) : 필수

연관 정보(라이브러리 연관 관계 및 상위 프로젝트 등 관련 정보에 대한 기술) : 필수

프로젝트 정보

선택

빌드 설정

빌드 정의(기본 설정되어 있는 빌드 프로세스에 변경을 위하여 별도의 플러그인을 적용할 때 사용) : 선택

리포트 정의(빌드 프로세스에 대한 리포팅 뿐 아니라 연관된 시스템과 결과 정보 등을 리포트로 만들기 위해 정의) : 선택

환경설정

선택


최상위 태그는 <project> (XML의 루트 태그)

모든 pom.xml은 최상위 pom.xml을 참조한다.

메이븐에서 기본적으로 제공하고 있는 것이며 개발자가 만드는 모든 pom.xml은 이를 상속받아서 사용한다.

이를 슈퍼 POM(Super POM)이라고 부른다. 재정의 하지 않는 이상 항상 기본값으로 적용되어 동작한다.


pom.xml 에서 사용되는 태그 (몇개만 설명)

<build>

- 메이븐의 기본 디렉터리 구조가 정의 되어 있다. 이정의 내용을 변경하여 메이븐의 기본 구조를 변경할 수 있다.

<version>

- 메이븐에서 버전에 대한 명명 규칙을 SNAPSHOT 과 RELEASE로 구분한다. 

- SNAPSHOT은 완성되지 않은 버전, RELEASE는 완성되어서 공식 배포된 버전이다.

<properties>

- pom.xml 파일 내부에서 사용할 속성을 정의한다. 주로 버전 정보 같이 공통적으로 많이 사용하는 내용을 속성으로 정의한다.

<scm>

- 버전 관리 시스템과 연계하기 위한 정보를 기술

<repositories>

- 메이븐 저장소 정보를 기술. 주로 사내 사설 저장소를 사용할 때 사용

<distributionManagement>

- 빌드의 결과물을 배포할 위치를 지정. 주로 사내 사설 저장소의 정보를 사용

<profiles>

- 특정 항목 혹은 특정 속성에 따라 빌드를 다르게 수행할 수 있다. 주로 하나의 pom.xml 파일로 개발, 테스트, 운영환경에서 모두 실행 가능하도록 할 때 유용하게 사용한다.


최신  pom정보는 (maven.apache.org/pom.html)에서 얻을 수 있음 


최소 pom

<project>
    <modelVersion></modelVersion>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
</project>

우리가 흔히 아는 오픈소스 라이브러리 등에 대한 참조 정보 역시 해당 라이브러리 프로젝트 속성 정보 3개를 이용한다.
또한 향후 메이븐 중앙 저장소나 사설 저장소에 등록해서 관리해야 할 경우 등록을 위한 필수 키도 바로 이 3개 항목이다.

groupId : 메이븐 프로젝트를 구분하기 위한 가장 첫 번째 항목으로 일반적으로 도메인명을 주로 사용. 전 세계의 수많은 개발자들이 만들어내고 있는 메이븐 기반의 프로젝트들과 중복되지 않도록 하기 위해 정의하는 명명 규칙
artifactId : 프로젝트 이름으로 인식하는 경우가 많음.groupId 와 artifactId를 조합해서 식별자로 사용 
groupId:artifactId:version 형태로 문장을 만들어 메이븐 주소라고 부름

728x90
반응형