안드로이드 빌드 스크립트 리포지토리 : jcenter vs mavencentral


239

마지막으로 Android Studio를 사용했을 때 빌드 스크립트 리포지토리가있는 .gradle파일이 생성 mavencentral()되었지만 지금은 있습니다 jcenter().

누구든지 이것과 관련된 문제를 설명 할 수 있습니까? 다른 저장소가 있습니까? 언제 전환해야합니까? 프로젝트, 모듈, 라이브러리에 어떤 영향을 미칩니 까? 안드로이드 개발자를위한 다른 필수품?

이러한 저장소를 유지 관리하는 담당자는 누구입니까?


6
@sgill이 언급했듯이 JFrog는 Bintray 및 JCenter의 관리자입니다. 구체적인 질문이 있으시면 다음을 수행하십시오. :
JBaruch

왜냐하면 ... 안드로이드. ;)
Joshua Pinter

답변:


150

Bintray에서 방금 Google이 변경 한 이유를 설명 하는 매우 자세한 블로그 게시물 을 다시 블로그에 게시했습니다 . 가장 중요한 사항은 다음과 같습니다.

  • JCenter는 Bintray의 Java 저장소로 , Java 및 Android OSS 라이브러리, 패키지 및 구성 요소를위한 세계 최대 규모의 저장소입니다.
  • JCenter의 모든 컨텐츠는 안전한 HTTPS 연결로 CDN을 통해 제공됩니다. 이전 당시 (Android Studio 0.8) 중앙 maven 2 리포지토리는 HTTP 전용이었으며 HTTPS는 지원되지 않았습니다. 참조 : 51.6.2. Maven 중앙 저장소 .
  • jcenter()mavenCentral()추가 세트로 , 많은 추가 저장소 및 아티팩트를 포함합니다.
  • 다른 시나리오와 국가에서 Bintray는 Maven Central보다 빠릅니다 (예 : 이스라엘). 다른 곳에서는 매우 가깝습니다. Maven Central과 Bintray는 지역에 따라 다른 CDN을 사용하기 때문에 두 가지 방식으로 바뀔 수 있습니다.
  • Bintray는 레거시 Maven Central과 다른 패키지 식별 방식을 사용합니다. 이것은 크고 심각한 보안 문제입니다. 그것은 중요하다.
  • 패키지를 Maven Central로 가져와야하는 경우 (레거시 도구를 지원하기 위해) 버튼을 클릭하거나 자동으로 Bintray에서도 패키지를 수행 할 수 있습니다 .

성능 향상과 관련하여 몇 가지 안드로이드 개발자 옹호자들은 maven central과의 거대한 색인 생성 문제에 직면하거나 주목했습니다.

Tor Norbye 의 말에서 :

새로운 설정 디렉토리로 AndroidStudio를 실행했기 때문에 maven central에 연결하여 사용 가능한 아티팩트 색인을 다운로드했습니다.

그런 다음 디렉토리의 크기를 보았습니다.

내 ~ / Library / Cache / AndroidStudioPreview는 1.5G이며, 그 중 1.2G는“Maven”하위 디렉토리에서 가져옵니다.

말도 안돼. 우리는 인덱스를 거의 사용하지 않습니다. 프로젝트 구조 대화 상자의 의존성 편집기는 주로 사용되지만 사전 계산 된 색인이 필요하지 않습니다. MavenCentral에는 누군가가 아티팩트를 검색 할 때 필요에 따라 사용할 수있는 빠른 온라인 JSON 검색 기능이 있습니다. 에서 https://android-review.googlesource.com/#/c/94843/ 우리는 의존성 여부를 검사가 최신 보풀이 검사를 추가하고, 유물의 소수에 대한 검색 근처 순간이다.

간단히 말해, 우리는 실제로 캐시가 필요하지 않습니다. .gradle 및 maven .pom 파일의 코드 완성에 도움이 될 수 있지만 이는 매우 중요한 사용 사례는 아니며 모든 사용자가 다운로드 속도와 디스크 공간을 1.5G로 희생하여 언젠가는 할 수있는 것은 아닙니다 . 더 읽기 : Maven 지수는 엄청납니다 !

또한, Hacker News에 대한 매우 짧은 (1Q 및 1A) 토론이 흥미로울 것입니다.


나는 뒤에 회사 JFrog 와 함께자세한 내용 및 링크는 내 프로필 을 참조하십시오 .


60

나는 똑같은 것을 궁금해했고 결정적인 대답이 없지만 내가 배운 것을 (작은) 공유 할 가치가 있다고 생각했습니다. Google Code의 한 문제 내 에서 Maven Central에서 JCenter로 이동 한 것에 대한 언급을 발견 했지만이 문제가 발생한 시점에 대한 세부 정보를 찾지 못했습니다. 최근 Android Studio의 변경 사항 목록에서 언급을 찾을 수 없었습니다.

JCenter를 읽음으로써 JFrog 회사의 Bintray 뒤에있는 저장소입니다 (이전에 본 적이있는 사람은 'J'의 출처입니다). Bintray 블로그에 따르면 Bintray는 Maven Central의 상위 세트 이므로 사실이 아닌 경우 누락 된 종속성과 관련된 문제는 없어야하지만 프로젝트에서 사용중인 항목에 정확히 의존 할 것이라고 생각합니다. 쉽게 검색 가능한 웹 사이트가 모두 있으므로 repos를 확인하십시오. 따라서이 리포지토리를 유지 관리하는 사람에게는 내가 아는 것처럼 각 리포지토리에 종속성을 추가하고 서비스를 유지 관리하는 것은 리포지토리 소유자에게 달려 있습니다.

전환시기와 관련하여 해결하기가 어렵습니다. AOSP는 여전히 Maven Central을 사용하고 있습니다 (새 안드로이드 응용 프로그램의 템플릿을 보면). 그런 다음에도 템플릿은 여전히 ​​오래된 Gradle 버전 (0.4)을 사용하고 있습니다. jcenter의 종속성에 문제가있는 다른 사람들에 대해서는 몇 가지 문제가 있지만 실제로는 많이보고되지 않았으며 Google은 AS final을 릴리스하기 전에 다른 저장소로 다시 전환 할 수 있습니다. Maven Central이 여전히 귀하를 위해 여전히 잘 작동하고 있다면, 특히 대규모 상용 솔루션을 구축 할 때까지 전환을 중단 할 수 있습니다.


5
또한 Maven Central, JCenter 및 기타를 포함하여 gradle 지원 리포지토리 목록을 찾을 수 있습니다. gradle.org/docs/current/userguide/…
SGill

11
저장소에 대한 Gradle 문서에서 Maven 저장소는 http 전송 프로토콜 만 지원하고 JCenter는 https를 지원한다고 말합니다. Google은 https의 큰 팬이므로 아마도 전환의 이유일까요?
Rob Meeuwisse

2
그냥 업데이트-Android Studio의 RC2 현재는 여전히 JCenter이므로 모든 종속성을 사용할 수 있는지 확인한 후 Android Studio가 마지막이되면 전환하기 좋은 시간이 곧 올 수 있다고 생각합니다 ....
SGill

5
Central Repository / Maven Central은 https를 잘 지원합니다.
Manfred Moser

2
2015 년 2 월 업데이트 : AS 1.1 RC 1, 여전히 jscript () 빌드 스크립트 / 저장소
Jose_GD

26

build.gradle 파일의 기본값이 무엇이든 팀 기반 개발 노력에서는 실제로 Sonatype Nexus 또는 JFrog Artifactory와 같은 저장소 관리자를 사용해야하며 해당 업스트림 저장소를 직접 참조하지 않아야합니다.

이를 통해 많은 대역폭을 절약하고 다른 리포지토리와 여러 리포지토리를 결합하여 자체 네트워크에서 모두 관리 할 수 ​​있습니다.

Maven Central과 JCenter의 관점에서. JCenter는 JFrog의 Maven Central을 포용, 확장 및 소멸시키기위한 노력입니다. Maven Central은 Maven, SBT 및 기타의 기본 저장소이며 Gradle은 JCenter로 전환되었습니다. JFrog와 Gradleware가 회사로서 함께 작동한다는 점을 고려하면 놀라운 일이 아닙니다. Android SDK는 현재 Gradle을 빌드 시스템으로 사용하므로 JCenter 로의 전환은 다음 단계의 논리였습니다.

JCenter 자체는 Maven Central 위에 얇은 베니어입니다. 프록시를 프록시 처리 (약간 성공)하고 추가 구성 요소를 추가합니다. 둘 다 CDN 네트워크 및 고성능에서 호스팅됩니다. Maven Central 자체는 모든 Eclipse, Apache 및 대부분의 다른 오픈 소스 프로젝트의 대상이며 JCenter가 없으면 대부분 비어 있습니다.

둘 중 하나를 사용하면 정상적으로 작동하지만 리포지토리 관리자를 사용하여 소스를 제어 할 수있는 소스로 바로 이동하는 것이 좋습니다. 예를 들어 Nexus Open Source 는 무료이며 Maven, Gradle, SBT, Ivy 및 기타에서 사용되는 Maven 리포지토리와 NuGet, NPM 및 RubyGems 지원을 지원합니다.

면책 조항 : 저는 Android Maven Plugin의 프로젝트 리더 인 무료 Central Repository의 후원자 인 Nexus 및 Nexus 트레이너와 함께 Nexus 및 Nexus 트레이너와 함께 Repository Management의 저자이며 AOSP에서 다시 빌드하여 일부 Android 라이브러리를 Central로 푸시했습니다.


3
JFrog 엔지니어링 팀에 따르면 중앙 저장소에서 아티팩트를 동적으로 요청합니다. 나는 그 프록시라고 부를 것이다. 당신이 그것을 다른 것이라 부르고 싶다면.
Manfred Moser

4
예를 들어 진보적 인 조직 pom 또는 android maven 플러그인과 같은 내 프로젝트와 Central에있는 다른 모든 프로젝트는 모두 jcenter에 나타납니다. Central 이외의 다른 곳에서는 출판되지 않았으므로 거기에서 가져 왔습니다. 그리고 괜찮습니다. Jcenter는 또 다른 배포 플랫폼입니다.
Manfred Moser


5
Hahah .. JCenter는 Central에서만 다운로드 한 다음 사용자에게 전달합니다.
Manfred Moser

2
간단한 "Maven Central 뒤에있는 회사에서 일하는 것"이면 충분합니다. 태그 라인의 서명이 아닙니다. stackoverflow.com/help/behavior 는 "... 응답에 귀하의 소속을 공개해야합니다."라고 명시하고 있습니다.
흐름

8

http://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/ko

이 기사는 당신에게 질문에 대답 할 수 있습니다.

처음에 Android Studio는 Maven Central을 기본 리포지토리로 선택했습니다. 이전 버전의 Android Studio에서 새 프로젝트를 생성하면 build.gradle에 mavenCentral ()이 자동으로 정의됩니다.

그러나 Maven Central의 큰 문제는 개발자 친화적이지 않다는 것입니다. 라이브러리를 업로드하는 것은 놀랍습니다. 그렇게하려면 개발자는 어느 정도 괴짜 야합니다. 그리고 보안 문제와 같은 몇 가지 더 많은 이유 때문에 Android Studio 팀은 최신 버전의 Android Studio에서 새 프로젝트를 만들면 jcenter ()가 자동으로 정의됨을 알 수 있으므로 기본 저장소를 jcenter로 전환하기로 결정했습니다. mavenCentral () 대신.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.