2016년 6월 9일 목요일

Dependency Management [How dependency resolution works]

Gradle은 당신의 dependency 선언과 repository 정의를 가져오고 dependency resolution이라 불리는 process를 통해 모든 dependency를 다운로드하려고 시도한다.
아래는 process가 어떻게 동작하는 지 간단하게 설명된 부분이다.

1.
요청된 dependency에 대해서, Gradle은 dependency를 위한 module을 먼저 결정하려고 한다.
각각의 repository는 순서대로 검사되고, module의 존재를 가리키는 module descriptor (POM 혹은 Ivy 파일)를 처음 검색한다.
만약 아무런 module descriptor가 발견되지 않으면, Gradle은 해당 repository에 그 module이 존재하는지 가리키는 module artifact 파일의 존재 여부를 먼저 찾게 된다.
   - 만약 dependency가 dynamic version(예를 들어 1.+)으로 선언되어 있다면, Gradle은 repository에서 가장 최신의 버전을 찾을 것이다.(예를 들어 1.2)
     Maven repository에서, 이 것은 maven-metadata.xml 파일을 통해 이루어지고, Ivy repository에서는 directory listing에 의해 이루어진다.
2.
 각각의 repository가 module을 위해 검사되면, Gradle은 사용할 수 있는 가장 최선의 것을 고른다.
 이 것은 아래 표준에 따라 이루어진다.
   - dynamic version에 대해서는, 가장 높은 버전이 선호된다.
   - module descriptor 에 의해 선언된 module은 artifact만 있는 module에 비해 선호된다.
   - 빠른 순서의 respository의 module이 선호된다.
 dependecy가 static version으로 선언되어 있고 module descriptor가 repository에서 발견될 때, 이후의 repository에 찾을 필요 없이 남은 과정은 생략된다.

3.
 모든 module의 artifact는 위의 과정에서 선택된 것과 동일한 repository에서 요청된다.

 원본 출처 : https://docs.gradle.org/current/userguide/dependency_management.html

댓글 없음 :

댓글 쓰기