Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

또 JDBC나 기타 라이브러리는 메이븐 중앙 저장소와 별도의 저장소를 제공하는 경우가 있으므로 따로 저장소를 지정하지 않으면 빌드가 실패하는 원인이 되기도 한다.

 

저장소 구조

저장소에 추가된 아티팩트는 디렉터리나 자바의 패키지처럼 계층적인 구조로 접근할 수 있다. 이 계층적 구조를 GAV(Group, Artifact, Version) 구조라고 하며 메이븐에서 의존성을 찾을 때 참고하는 구조이기도 하다.

 

Group Identifier(groupId)

그룹 ID는 아티팩트를 논리적인 그룹으로 묶기 위한 단위이다. 보통 개발하는 회사나 기관명뒤에 만드는 소프트웨어 컴포넌트명을 붙여서 짓는다. 예로 아파치 재단 산하의 메이븐 프로젝트의 그룹 ID 는 org.apache.maven 이다.

 

Artifact Identifier(artifactId)

아티팩트 ID 는 프로젝트의 결과물인 어플리케이션이나 라이브러리의 이름을 위미한다. 만약 개발하고 있는 프로젝트가 "example webapp" 라면 아티팩트 ID는 example-webapp 로 짓는다. 그룹 ID와 아티팩트 ID 를 합친 문자열은 유일한 식별자이어야 하며 다른 프로젝트일 경우 아티팩트 ID 를 달리해야 한다.

 

Version(version)

버전은 아티팩트의 버전이며 일반적으로 메이저, 마이너, 포인트로 나눠서 짓는다. example-webapp 의 메이저 버전이 1 이고 마이너가 2, 포인트 버전이 4일 경우 최종 버전은 1.2.4 가 된다. 버전에는 구분을 용이하게 하기 위해 문자열을 사용할 수 있다. 다음과 같은 버전도 유효한 버전명이다.

1.2.4-BETA3

2.0.0-RC5

Packaging(packaging)

메이븐을 빌드 도구로 사용할 경우 기본 패키지 형식은 JAR 파일이지만 저장소에 아티팩트 등록시 명시적으로 패키지 형식을 알려주어야 한다. 사용 가능한 패키지 형식은 JAR, ZIP, WAR, WAR, SWC 등이다.

 

릴리스와 스냅샷 저장소(Release and Snapshot Repositories)

프로젝트에서 공통으로 사용되는 라이브러리를 개발하는 별도의 프로젝트가 있다고 가정해 보자.

개발 단계의 라이브러리는 수시로 변경되며 자주 테스트 되어야 하지만 안정화 될 때까지는 이 라이브러리를 참조하는 프로젝트에서는 사용하지 않는게 좋을 경우가 많다.

이를 위해 안정 버전의 라이브러리와 개발 단계 라이브러리를 구분하여 저장소를 나누어 관리하면 유용할 것이다. 

이를 위해 개발 단계에서는 스냅샷 저장소를 통해 배포하고 테스트가 끝나고 안정화된 라이브러리는 릴리스 저장소에 저장하여 배포한다. 

보통 스냅샷 아티팩트는 구분을 위해 my-artifact-1.2.3-20140506.162341-1.jar 처럼  타입스탬프가 파일명에 추가된다.

 

저장소 관리자(Repository Manager)

저장소 관리자는 저장소의 기능 및 관리자 기능을 제공하는 소프트웨어를 의미하며 아티팩트를 저장/관리하고 컴포넌트의 생명주기를 관리하기 위한 용도로 사용된다.

...