출저 : http://sunghwanjo94.blogspot.kr/2015/07/jcenter.html


Android Studio는 어디에서 라이브러리를 가져오는 걸까?


Android Studio는 build.gradle 에 작성해둔 Maven Repository Server에서 라이브러리를 가져옵니다. 일반적으로 안드로이드는 jcenter와 Maven Central에서 라이브러리를 가져옵니다.

jcenter
jcenter는 bintray.com이 운영하는 Maven Repository입니다. jcenter의 라이브러리를 사용하기 위해서는 build.gradle 파일에 아래와 같이 정의해야 합니다.

1:  allprojects {  
2:    repositories {  
3:      jcenter()  
4:    }  
5:  }  



Maven Central
Maven Central은 sonatype.org이 운영하는 Maven Repository입니다.  Maven Central의 라이브러리를 사용하기 위해서는 build.gradle 파일에 아래와 같이 정의해야 합니다.

1:  allprojects {  
2:    repositories {  
3:      mavenCentral()  
4:    }  
5:  }  


jcenter와 Maven Central은 둘다 표준 안드로이드 라이브러리 저장소들이지만 완전히 다른 장소에서 운영됩니다. 서로 아무런 연관이 없습니다. (jcenter는 Maven Central 저장소에 배포하는 기능을 제공하긴합니다.)

그 외의 곳에서는?
그 외의 다른 저장소로부터 라이브러리를 가져오기 위해선 아래와 같이 저장소의 위치를 명시해주어야 합니다.

1:  repositories {  
2:    maven { url '다른저장소의주소' }  
3:  }  


그렇게 하면 그 저장소에 배포되어있는 다른 라이브러리를 가져올수 있습니다.

1:  dependencies {  
2:    compile '다른저장소에있는.라이브러리'  
3:  }  



그렇다면, 표준서버와 개인서버에 배포하는것 중 무엇이 좋을까요? 개인적으로 사용해야하는 라이브러리는 개인서버에 배포하는것이 낫고, 다른 개발자들과 함께 나누고 싶다면 표준서버에 배포하는것이 좋을겁니다. 그냥 개인의 판단에 따라 마음에 드는곳에 하시면됩니다. 이 글에서는 jCenter에 배포하는법에 대해서 다룹니다.

jcenter와 Maven Central에 대한 이해


jcenter와 Maven Central은 Java/Android 라이브러리들을 배포한다는 공통점을 가지고 있습니다.

초반에 Android Studio에서는 Maven Central을 기본 저장소로 선택했습니다. 과거버전 Android Studio 프로젝트의 build.gradle에서는 mavenCentral()이 정의 되어있을 것입니다.

하지만 Maven Central은 개발자 친화적이지 않았습니다. 라이브러리를 업로드하는것이 정말정말정말로 어렵고 geeky의 레벨에 도달한 개발자들이나 가능했습니다. 그리고 기타등등 문제들 때문에 Android Studio 팀은 jcenter를 기본 저장소로 변경하기로 결정했습니다.

Maven Central에서 jcenter로 변경한것에는 다양한 이유가 있습니다

  1. jcenter는 CDN을 통해 라이브러리를 배포합니다. 따라서 개발자들은 빠른 로딩속도를 즐길수 있습니다.
  2. jcenter는 지구상에서 가장큰 Java Repository입니다. 
  3. 저장소에 라이브러리를 업로드하는것이 정말정말정말 쉽습니다.
  4. 친근한 UI !
  5. 만약 Maven Central에 라이브러리를 배포하고싶다면 bintray site에서 한번의 클릭을 통해 배포할 수 있습니다. ( 한번 설정을 해주어야하긴 합니다)
위와 같은 이유 때문에 jcenter를 기본저장소로 지정한것이 굉장히 좋은판단이였다고 생각됩니다. 라고 하네요. (왜 처음에는 Maven Central를 지정했는지 의문입니다) 


gradle은 어떻게 저장소로부터 라이브러리를 가져올까?


어떻게 jcenter로 라이브러리를 업로드하는지 말하기전에. gradle이 어떻게 저장소로부터 라이브러리를 가지고 오는지 알아봅시다. 예를들어 build.gradle에 아래와 같이 적혀있다면, 그 프로젝트에 해당 라이브러리 파일이 다운로드 됩니다.

1:  compile 'org.nhnnext.sunghwanjo:gearslider:0.1.1'  

기본적으로 라이브러리를 가져오기 위한 문자열은 3개의 부분으로 구성되어 있습니다.

1:  GROUP_ID:ARTIFACT_ID:VERSION  

위에서 GROUP_ID는 org.nhnnext.sunghwanjo 입니다. ARTIFACT_ID는 gearslider이고 VERSION은 0.1.1이죠.

GROUP_ID는 라이브러리의 그룹이름을 의미합니다. 같은 문맥상 여러가지일을 하는 하나이상의 라이브러리가 있을 가능성이 있습니다. 이럴때 GROUP_ID를 공유하면 됩니다. 보통 개발자의 패키지명으로 합니다.
ARTIFACT_ID는 라이브러리의 이름입니다. VERSION은 버전정보인데 어떤 텍스트가 들어가도 상관없습니다. 다만, x.y.z의 형태로 작성하는 것을 추천합니다. 만약 본인이 원한다면 뒤에 -beta를 붙여도 괜찮습니다.

1:  dependencies {  
2:    compile 'com.squareup:otto:1.3.7'  
3:    compile 'com.squareup.picasso:picasso:2.5.2'  
4:    compile 'com.squareup.okhttp:okhttp:2.4.0'  
5:    compile 'com.squareup.retrofit:retrofit:1.9.0'  
6:  }  

위와 같이 의존성을 추가한다면 무슨일이 벌어질까요? Gradle은 Maven Repository Server에 원하는 라이브러리가 존재하는지 물어볼 것입니다. 존재한다면 주로 GROUP_ID:ARTIFACT_ID:VERSION_ID의 형태로 요청된 라이브러리의 경로를 얻을 것입니다.

그리고 Android Studio는 우리의 장비에 파일들을 다운로드하고 컴파일합니다. 그렇다면 라이브러리를 가져오는것은 끝!

이제 저장소로부터 library를 가져오는 방법에 대해서는 알지만 jar 와 aar 파일이 저장소 서버에 올려졌다는 것은 잘 모를것입니다. 또는 aar에 대해서 잘 모른다거나.


+ Recent posts