메이븐(maven) 의존성 관리
pom.xml에 lib관련 내용을 추가하면 maven repositoy에서 라이브러리를 다운받아서 로컬의 메이븐 저장소에 저장(기본 위치는 사용자 홈 디렉터리 하위의 .m2 디렉터리에 저장되며 설정에 따라서 위치 변경 가능)
ex) maven Repositoy(http://search.maven.org/)
의존성 관리를 하면서 빼놓을 수 없는 것이 관련 라이브러리를 메이븐에서 어느 범위까지 적용해서 사용할 것인지 정의하는 부분이다.
메이븐에서 사용가능한 5가지 범위 존재
Compile
- 기본값, 컴파일 범위는 모든 단계.
- 즉, 컴파일, 테스트, 실행, 배포 전체에 클래스 패스로 사용되며 현재 프로젝트와 연관된 다른 프로젝트에도 영향을 준다.
Provided
- Compile 범위와 상당히 유사하지만 컴파일 시점에만 포함되고 배포할 때는 포함되지 않는다.
- 대표적으로 Servlet API, J2EE 등과같이 배포 대상 서버에는 이미 존재하지만 컴파일시에는 참조가 필요한 경우 사용한다.
Runtime
- 컴파일에서는 사용하지 않고 오직 실행과 테스트에만 사용하는 범위.
- 즉, 컴파일시에는 클래스패스에 잡히지 않는다.
Test
- 오직 테스트하는 시점에서만 적용
System
- 외부에서 찾는다. 이 범위를 사용하기 위해서는 JAR파일의 위치를 명시해야 한다.
라이브러리 제외시키기
메이븐에서 하나의 라이브러리를 지정하면 관련된 라이브러리를 자동으로 가져오는데 이때 문제가 발생할 때가 있다. 즉, 내가 원하는 라이브러리가 아닌 다른 버전의 라이브러리가 적용되거나 충돌이 발생하는 라이브러리가 자동으로 프로젝트 범위에 포함될 수 있다.
이를 방지하기 위해서 특정 라이브러리를 프로젝트에서 제외시키도록 정의할 수 있다.
<dependency>
<groupdId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
…..
org.apache.maven 라이브러리를 프로젝트에서 사용하지만 maven-embedder만 사용하고 maven-core는 제외시키겠다는 것을 의미
메이븐(Maven) 저장소 이해
메이븐은 연관된 라이브러리를 관리하고 공유하기 위해서 저장소라는 개념을 사용
로컬 저장소
- pom파일을 실행할 때마다 필요한 라이브러리를 원격 저장소에서 받아서 이곳에 저장하게 됨. 한 번 저장된 라이브러리는 다시 다운받지 않고 로컬 저장소에 있는 것을 참조하여 실행
사설 저장소
- 회사 혹은 프로젝트 내에서 공유 목적으로 사용하는 저장소(내부에서 공유하는 목적으로 사용)
중앙 저장소
- 메이븐에서 제공하는 중앙 저장소
사설 저장소를 사용하기 위해서는 메이븐과 연동해서 저장소 역할을 수행하는 소프트웨어를 설치해야한다. (넥서스, 아티팩토리 등 존재)
-기타연계작업
-형상 관리 시스템 연계
메이븐에서는 scm 태그를 이용해서 버전 관리 시스템과 연계할 수 있다.
<scm>
<connection>scm:svn:http://127.0.0.1/svn/my-project</connection>
<developerConnection>sum:svn:https://127.0.0.1/svn/my-project</developerConnection>
<tag>HEAD</tag>
<url>http://127.0.0.1/websvn/my-project</url>
</scm>
<connection> 규칙 scm:[provider]:[provider_specific]
Scm 다음에 연계하고자 하는 버전 관리 시스템명, 그리고 해당 시스템별 특화된 접속 URL
'프로그래밍 노트 > 빌드도구' 카테고리의 다른 글
[Maven] 메이븐(Maven) 생명주기 (0) | 2018.07.27 |
---|---|
[Maven] 메이븐(Maven) 기본 Properties(설정파일) (0) | 2018.07.27 |
[Maven] 메이븐(Maven) POM 구조의 이해 (0) | 2018.06.14 |
[Maven] 메이븐(Maven) 빌드 및 패키징 (0) | 2018.06.14 |
[Maven] 메이븐(Maven) 설치 및 프로젝트 생성 (0) | 2018.06.13 |