본문 바로가기

공부/Maven

[서적 핵심 정리] Maven 의존 라이브러리 관리

메이븐 저장소

  • 중앙 저장소
    • 오픈 소스 라이브러리, 메이븐 플러그인, 메이븐 아키타입 관리
    • http://repo1.maven.org/maven2/
    • 개발자 임의로 라이브러리 배포 불가
  • 원격 저장소
    • 사내 원격 저장소 또는 별도의 3자 업체에서 제공하는 저장소
  • 로컬 저장소
    • 개발자 PC의 저장소

메이븐 저장소 설정
  • <repository> 엘리먼트 설정을 통해 추가 저장소를 설정 가능

메이븐 의존 라이브러리 관리
  • <dependency> 엘리먼트 설정을 통해 라이브러리 설정
  • <version> 엘리먼트의 의존성 관리
    • 예1) [3.8, 4.8): 3.8 버전을 포함하고, 4.8보다 작은 버전을 사용
    • 예2) LATEST/RELEASE - 가장 최신 버전 사용
    • 개발중인 라이브러리에 SNAPSHOT 접미어 사용 시, 매 빌드 시 최신 버전의 라이브러리 다운로드
  • <scope> 엘리먼트의 속성
    • compile : 해당 라이브러리는 컴파일 단계 이상에서 포함
    • provided : 해당 라이브러리는 배포 단계 및 그 이후 단계에서 제외 (예: servlet.jar)
    • runtime : 애플리케이션 실행 시에만 사용
    • test : 테스트 시점에만 사용
    • system : provided와 비슷하나, 사용자가 직접 제공하는 jar 파일
    • import : 다른 POM 설정 파일에 정의되어 있는 의존관계 설정을 현재 프로젝트로 가져옴

메이븐 의존성 전이
  • 프로젝트에 포함되는 라이브러리가 포함하는 라이브러리를 자동으로 포함시켜줌
    • 즉, 라이브러리의 POM 에 설정된 의존성을 프로젝트에서 로드
  • 의존성 전이를 피하고 싶을 땐 다음과 같은 방법이 가능
    • <exclusion>엘리먼트를 통해 특정 라이브러리를 명시적으로 제외
    • <optional> 엘리먼트를 통해 선택적으로 포함되는 라이브러리를 제외시킬 수 있음
    • <scope>를 통해, 특정 단계에만 포함할 라이브러리를 설정


속성

  • <properties> 엘리먼트 하위의 <property.name>에 정의
  • ${property.name}의 형태로 사용
  • POM/project 속성
    • pom.xml 파일의 엘리먼트에 설정한 정보. pom 또는 project 접두어를 가짐
    • ${project.build.directory}, ${pom.build.directory} : target 디렉토리
    • ${project.build.outputDirectory} : target/classes 디렉토리
    • ${project.name}, ${pom.name} : 프로젝트 이름
    • ${project.version}, ${pom.version}, ${version} : 프로젝트 버전
    • ${project.build.finalName} : package 페이즈를 실행해 압축한 최종 파일 이름
  • setting 속성
    • settings.xml 파일에 설정한 정보. settings 접두어를 가짐
    • ${settings.localRepository} : 로컬 저장소 경로
  • 환경 변수 속성
    • 시스템 환경 변수. env 접두어를 사용
    • ${env.PATH} : 시스템의 PATH 설정
    • ${env.JAVA_HOME} : 시스템의 JAVA_HOME 설정 값
  • 자바 시스템 속성
    • 자바 시스템 속성으로 설정된 모든 속성값을 참조 가능
  • {$basedir}: pom.xml 설정 파일이 위치하는 디렉토리


출처: 자바 세상의 빌드를 이끄는 메이븐 (박재성 저)