Kho lưu trữ bản dựng Android: jcenter VS mavencentral


239

Lần cuối cùng tôi sử dụng Android Studio, nó đã tạo .gradlecác tệp có mavencentral()kho lưu trữ bản dựng trong khi bây giờ có jcenter().

Bất cứ ai có thể giải thích các vấn đề liên quan đến điều này. Có repos nào khác không? Khi nào chúng ta nên chuyển đổi chúng? Họ có tác động gì đến các dự án, mô-đun, libs? Bất kỳ điều cần thiết khác cho các nhà phát triển Android?

Ai chịu trách nhiệm duy trì các repos đó?


6
Như @sgill đã đề cập, JFrog là những người duy trì Bintray và JCenter. Nếu bạn có bất kỳ câu hỏi cụ thể nào, hãy bắn đi :)
JBaruch

Vì .... Android. ;)
Joshua Pinter

Câu trả lời:


150

Tại Bintray tôi chỉ đăng lại một bài đăng trên blog rất chi tiết mô tả lý do tại sao Google thực hiện thay đổi này. Dưới đây là những điểm quan trọng nhất:

  • JCenter là một kho lưu trữ Java trong Bintray , đây là kho lưu trữ lớn nhất trên thế giới dành cho các thư viện, gói và thành phần OSS của Java và Android.
  • Tất cả nội dung trong JCenter được cung cấp qua CDN, với kết nối HTTPS an toàn. Quay lại thời điểm di chuyển (Android Studio 0.8) Kho lưu trữ trung tâm maven 2 chỉ là HTTP và HTTPS không được hỗ trợ. Tham khảo: 51.6.2. Kho lưu trữ trung tâm Maven .
  • jcenter()là một superset của mavenCentral(), bao gồm nhiều kho lưu trữ và tạo tác bổ sung.
  • Trong các kịch bản khác nhau và từ các quốc gia khác nhau, Bintray nhanh hơn Maven Central (ví dụ từ Israel). Trong những người khác, nó rất gần gũi. Vì Maven Central và Bintray sử dụng các CDN khác nhau có lợi cho các khu vực, điều này có thể thay đổi theo cả hai cách.
  • Bintray có một cách tiếp cận khác để nhận dạng gói so với Maven Central. Đây là một vấn đề an ninh lớn và nghiêm trọng. Nó quan trọng.
  • Nếu bạn thực sự cần đưa gói của mình đến Maven Central (để hỗ trợ các công cụ kế thừa), bạn cũng có thể thực hiện việc đó từ Bintray, chỉ bằng một nút bấm hoặc thậm chí tự động .

Về cải tiến hiệu suất, một vài người ủng hộ nhà phát triển Android đã phải đối mặt / nhận thấy vấn đề lập chỉ mục khổng lồ với maven trung tâm.

Theo lời của Tor Norbye :

Tôi đã chạy AndroidStudio với một thư mục cài đặt hoàn toàn mới, vì vậy nó đã đi và kết nối trung tâm maven và tải xuống một chỉ mục của các tạo phẩm có sẵn.

Sau đó, tôi tình cờ nhìn vào kích thước của thư mục của tôi.

My ~ / Library / Cache / AndroidStudioPreview là 1,5G và 1,2G trong số đó được lấy bởi thư mục con của Maven Tiết.

Điều đó thật nực cười. Chúng tôi hầu như không sử dụng chỉ số nào cả. Sử dụng chính cho nó là trình soạn thảo Phụ thuộc trong Hộp thoại Cấu trúc Dự án, nhưng chúng tôi thực sự không cần phải có một chỉ mục được tính toán trước cho nó. MavenCentral có một tìm kiếm JSON trực tuyến nhanh, chúng tôi có thể sử dụng theo yêu cầu khi ai đó tìm kiếm các tạo phẩm. Trong https://android-review.googlesource.com/#/c/94843/, chúng tôi đã thêm một kiểm tra lint để kiểm tra xem các phụ thuộc có được cập nhật hay không và việc tìm kiếm một số cổ vật gần như ngay lập tức.

Nói tóm lại, chúng tôi thực sự không cần bộ đệm; nó có thể giúp hoàn thành mã trong các tệp .gradle và maven .pom, nhưng đó không phải là một usecase cực kỳ quan trọng và chắc chắn không phải là thứ mà tất cả người dùng phải hy sinh 1,5G tốc độ tải xuống và không gian đĩa để có thể thực hiện trong một ngày. Đọc thêm về: Chỉ số Maven rất lớn !

Ngoài ra, bạn có thể thấy cuộc thảo luận rất ngắn (1Q và 1A) này trên Hacker News thú vị.


Tôi với JFrog , công ty đằng sau, xem hồ sơ của tôi để biết chi tiết và các liên kết.


60

Tôi đã tự hỏi tương tự, và tôi không có câu trả lời dứt khoát nhưng cho rằng nó có thể đáng để chia sẻ những gì (ít) tôi đã học được. Tôi thấy đề cập đến việc chuyển từ Maven Central sang JCenter trong một vấn đề trên Google Code , nhưng không phát hiện chi tiết về chính xác khi điều này xảy ra - không thể tìm thấy đề cập trong danh sách thay đổi gần đây cho Android Studio.

Từ việc đọc trên JCenter, đây là kho lưu trữ phía sau Bintray, từ công ty JFrog (người mà tôi đã gặp trước đây và tôi đoán đó là nơi 'J' đến từ đâu). Theo blog Bintray, Bintray là một siêu sao của Maven Central , vì vậy nếu đó là sự thật thì không có vấn đề gì với sự phụ thuộc bị thiếu, nhưng tôi đoán nó sẽ phụ thuộc vào chính xác những gì bạn đang sử dụng trong các dự án của mình - bạn luôn có thể trực tiếp kiểm tra các repos vì cả hai đều có các trang web dễ tìm kiếm. Vì vậy, đối với những người duy trì các repos này, như tôi biết, tùy thuộc vào các nhà sản xuất phụ thuộc để thêm các phụ thuộc của họ vào mỗi repo và cho chủ sở hữu repo chỉ để duy trì dịch vụ.

Về mặt khi chuyển đổi thì rất khó để làm việc. AOSP vẫn đang sử dụng Maven Central tôi nghĩ (từ việc tìm trong Mẫu cho Ứng dụng Android mới), nhưng mẫu đó cũng vẫn đang sử dụng phiên bản Gradle rất cũ (0.4). Có một số vấn đề về những người khác gặp vấn đề với sự phụ thuộc từ jcenter, nhưng không thực sự được báo cáo nhiều, và có thể Google sẽ chuyển đổi lại sang một số repo khác trước khi phát hành AS chung kết. Nếu Maven Central vẫn hoạt động tốt cho bạn thì bây giờ bạn có thể ngừng chuyển đổi cho đến lúc đó đặc biệt nếu bạn đang xây dựng các giải pháp thương mại lớn.


5
Bạn cũng có thể tìm thấy danh sách các kho lưu trữ được hỗ trợ bằng lớp ở đây - bao gồm Maven Central, JCenter và các kho
SGill

11
Trong tài liệu Gradle về kho lưu trữ, nó nói rằng repo Maven chỉ hỗ trợ giao thức truyền tải http, trong khi JCenter hỗ trợ https. Google là một fan hâm mộ lớn của https, vì vậy có lẽ đó là lý do để họ chuyển đổi?
Rob Meeuwisse

2
Chỉ là một bản cập nhật - kể từ RC2 của Android Studio, vẫn là JCenter, vì vậy tôi nghĩ rằng thời điểm tốt để chuyển đổi có thể là sớm, khi Android Studio hoàn tất, sau khi kiểm tra tất cả các phụ thuộc của bạn có sẵn ....
SGill

5
Trung tâm lưu trữ / Maven Central hỗ trợ https tốt.
Manfred Moser

2
Cập nhật tháng 2 năm 2015: AS 1.1 RC 1, vẫn là jcenter () trong bản dựng / kho lưu trữ
Jose_GD

26

Bất kể mặc định là gì trong tệp build.gradle - trong nỗ lực phát triển dựa trên nhóm, bạn thực sự nên sử dụng trình quản lý kho lưu trữ như Sonatype Nexus hoặc JFrog Artifactory và không tham chiếu trực tiếp các kho lưu trữ ngược dòng đó.

Điều này sẽ cho phép bạn tiết kiệm rất nhiều băng thông, kết hợp cả hai và nhiều kho lưu trữ khác và quản lý tất cả trong mạng riêng của bạn.

Xét về Maven Central vs JCenter. JCenter là nỗ lực của JFrog để nắm lấy, mở rộng (và tiêu diệt?) Maven Central. Maven Central là kho lưu trữ mặc định trong Maven, SBT và các kho khác, trong khi Gradle đã chuyển sang JCenter. Điều này không có gì đáng ngạc nhiên khi xem xét rằng JFrog và Gradleware làm việc cùng nhau như các công ty. Vì SDK Android sử dụng Gradle làm hệ thống xây dựng bây giờ, việc chuyển sang JCenter là một bước tiếp theo logic.

Bản thân JCenter là một veneer mỏng trên đỉnh Maven Central. Nó ủy nhiệm nó (ít nhiều thành công) và thêm các thành phần bổ sung. Cả hai đều được lưu trữ trên mạng CDN và hiệu suất cao. Bản thân Maven Central là mục tiêu cho tất cả các dự án Eclipse, Apache và hầu hết các dự án nguồn mở khác và nếu không có nó, JCenter sẽ hầu như trống rỗng.

Sử dụng một trong hai cách này sẽ hoạt động tốt, nhưng tôi khuyên bạn nên đi thẳng đến nguồn nơi bạn có thể và trên hết điều khiển nó bằng cách sử dụng trình quản lý kho lưu trữ. Ví dụ, Nguồn mở Nexus là miễn phí và có hỗ trợ cho các kho lưu trữ Maven như được sử dụng bởi Maven, Gradle, SBT, Ivy và những người khác cũng như hỗ trợ NuGet, NPM và RubyGems.

Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của Quản lý kho lưu trữ với huấn luyện viên Nexus và Nexus cho Sonatype, nhà tài trợ của Trung tâm lưu trữ miễn phí, trưởng dự án của Plugin Android Maven và đã đẩy một số thư viện Android sang Trung tâm bằng cách xây dựng lại từ AOSP.


3
Theo nhóm kỹ sư JFrog, nó tự động yêu cầu các tạo tác từ kho lưu trữ Trung tâm. Tôi sẽ gọi proxy đó .. nếu bạn muốn gọi nó là cái gì khác tùy thuộc vào bạn.
Manfred Moser

4
Ví dụ: các dự án của tôi như pom tổ chức tiến bộ hoặc plugin android maven và tất cả các dự án khác ở miền Trung đều xuất hiện trong jcenter. Không ai trong số họ được xuất bản ở bất cứ nơi nào khác ngoài Central vì vậy bạn đã đưa họ từ đó. Và đó là tốt. Jcenter chỉ là một nền tảng phân phối khác.
Manfred Moser


5
Hahah .. JCenter chỉ tải xuống từ Trung tâm và sau đó chuyển cho người dùng.
Manfred Moser

2
Một "Tôi làm việc cho công ty đằng sau Maven Central" đơn giản là đủ. Đó không phải là một chữ ký của khẩu hiệu. stackoverflow.com/help/behavior nói rõ rằng "... bạn phải tiết lộ liên kết của mình trong câu trả lời của bạn."
Lưu lượng

8

http://inthecheesefactory.com/blog/how-to-upload-l Library-to-jenter-maven-central-as-dependency / vi

Bài viết này có thể trả lời bạn câu hỏi.

Lúc đầu, Android Studio đã chọn Maven Central làm kho lưu trữ mặc định. Khi bạn tạo một dự án mới từ phiên bản Android Studio cũ, mavenCentral () sẽ được xác định tự động trong build.gradle.

Nhưng vấn đề lớn của Maven Central là nó không thân thiện với nhà phát triển. Thật đáng ngạc nhiên khi tải lên thư viện. Để có thể làm như vậy, nhà phát triển phải ở một mức độ táo bạo nào đó. Và với một số lý do khác ví dụ như mối quan tâm về bảo mật, v.v., nhóm Android Studio đã quyết định chuyển kho lưu trữ mặc định sang jcenter thay vì bạn có thể thấy rằng một khi bạn tạo một dự án mới từ phiên bản Android Studio mới nhất, jcenter () sẽ được xác định tự động thay vì mavenCentral ().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.