Maven Repository 유형
Apache Maven은 Dependency를 자동으로 다운로드하고 JAR 파일들을 보관하기 위해서 Maven Repository를 활용합니다. 다음은 Maven Repository를 설명한 도식입니다.
Repository 유형 | 설명 |
---|---|
Local Repository |
|
Remote Repository |
|
Central Repository |
|
회사내 Maven Repository를 설치해서 사용하는 경우
회사내 Maven Repository를 이용하는 경우는 크게 다음 세 가지입니다.
- 회사내 소스코드의 빌드한 결과물(artifact)를 별도로 관리하는 경우 → 사내 Maven Repository(아래에서는 Remote Repository)에만 등록하여 사용합니다.
- Maven Repository를 빠르게 접근하여 사용하고자 하는 경우 → Central Repository 보다 사내 Maven Repository가 훨씬 네트워크가 빠릅니다.
- Central Repository에 없는 별도의 JAR 파일들을 별도로 관리해야 하는 경우 → 사내 Maven Repository에 별도로 등록하여 사용합니다.
다음의 도식은 사내 Maven Repository(=Maven Remote Repository)를 구축하고 Maven Remote Repository가 Central Repository의 Proxy로 동작하도록 구성한 사례입니다.
Maven의 Repository를 활용하는 동작 순서
다음은 Maven을 이용하여 빌드시 Maven이 Maven Repository를 활용하는 방식에 대한 도식입니다.
- 개발자는 프로젝트의 Maven POM에 다양한 형태의 라이브러리를 추가합니다.
- 개발자는 프로젝트의 소스코드에 추가한 라이브러리를 import하여 소스코드를 작성합니다.
- 자바 소스코드를 컴파일합니다.
- 소스코드를 컴파일 하기 위해서 Maven이 호출됩니다.
- Maven은
pom.xml
파일(Maven POM)을 로딩하여 dependency를 확인합니다. - Maven은 Maven POM에 등록되어 있는 dependency를 local repository에 있는지 확인합니다.
- 없는 경우 Central Maven Repository에서 다운로드합니다. (만약에 Remote Repository를 추가했다면 Remote Repository에서 먼저 다운로드를 시도합니다)
- Maven은 다운로드한 dependency를 이용하여 빌드한 후 바이너리 파일을 생성합니다.
Local Repository의 구조
Local Repository는 다음과 같이 사용자의 홈 디렉토리 아래에 .m2/repository
디렉토리에 구성되며 Maven을 실행할때 자동으로 생성됩니다. 그리고 dependency를 다운로드한 후에는 다음과 같이 디렉토리를 구성합니다.
# cd ~/.m2/repository # tree | head -100 . ├── antlr │ └── antlr │ ├── 2.7.2 │ │ ├── _remote.repositories │ │ ├── antlr-2.7.2.jar │ │ ├── antlr-2.7.2.jar.sha1 │ │ ├── antlr-2.7.2.pom │ │ └── antlr-2.7.2.pom.sha1 │ └── 2.7.7 │ ├── _remote.repositories │ ├── antlr-2.7.7-sources.jar.lastUpdated │ ├── antlr-2.7.7.jar │ ├── antlr-2.7.7.jar.sha1 │ ├── antlr-2.7.7.pom │ └── antlr-2.7.7.pom.sha1 ├── aopalliance │ └── aopalliance │ └── 1.0 │ ├── _remote.repositories │ ├── aopalliance-1.0-sources.jar │ ├── aopalliance-1.0-sources.jar.sha1 │ ├── aopalliance-1.0.jar │ ├── aopalliance-1.0.jar.sha1 │ ├── aopalliance-1.0.pom │ └── aopalliance-1.0.pom.sha1 ... 생략
Group ID와 Artifact ID에 따른 Local Repository 구성
Maven POM에 다음과 같이 2개의 dependency를 저장했다고 가정하겠습니다.
<dependency> <groupId>antlr</groupId> <artifactId>antlr</artifactId> <version>2.7.2</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
Local Repository에 dependency를 저장할 때에는 Group ID, Artifact ID, Version에 따라서 다음과 같이 저장합니다.
├── antlr >> Group ID : antlr └── antlr >> Artifact ID : antlr ├── 2.7.2 >> Version : 2.7.2 │ ├── _remote.repositories │ ├── antlr-2.7.2.jar │ ├── antlr-2.7.2.jar.sha1 │ ├── antlr-2.7.2.pom │ └── antlr-2.7.2.pom.sha1 └── 2.7.7 ├── _remote.repositories ├── antlr-2.7.7-sources.jar.lastUpdated ├── antlr-2.7.7.jar ├── antlr-2.7.7.jar.sha1 ├── antlr-2.7.7.pom └── antlr-2.7.7.pom.sha1 ├── ch └── qos └── logback >> Group ID : ch.qos.logback └── logback-classic >> Artifact ID : logback-classic └── 1.2.3 >> Version : 1.2.3 ├── _remote.repositories ├── logback-classic-1.2.3-sources.jar ├── logback-classic-1.2.3-sources.jar.sha1 ├── logback-classic-1.2.3.jar ├── logback-classic-1.2.3.jar.sha1 ├── logback-classic-1.2.3.pom └── logback-classic-1.2.3.pom.sha1
Remote Repository 추가하기
Maven POM에 아래와 같이 repository를 추가하여 사용할 수 있습니다.
<project ...> <dependencies> <dependency> <groupId>com.companyname.common-lib</groupId> <artifactId>common-lib</artifactId> <version>1.0.0</version> </dependency> <dependencies> <repositories> <repository> <id>companyname.lib1</id> <url>http://download.companyname.org/maven2/lib1</url> </repository> <repository> <id>companyname.lib2</id> <url>http://download.companyname.org/maven2/lib2</url> </repository> </repositories> </project>
Local Repository는 어디에 있을까?
각 개발자의 Local Repository는 로그인한 사용자의 홈 디렉토리($USER_HOME/.m2/repository
)에 구성됩니다. 다만, 이를 변경하기 위해서는 다음과 같이 local repository를 지정할 수 있습니다. 보통은 권장하지 않습니다.
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>C:/MyLocalRepository</localRepository> </settings>