ที่เก็บ Android buildscript: jcenter VS mavencentral


239

ครั้งสุดท้ายที่ผมใช้ Android สตูดิโอก็สร้าง.gradleไฟล์ที่มีmavencentral()ที่เก็บ buildscript jcenter()ในขณะที่ตอนนี้มี

ใครสามารถอธิบายปัญหาที่เกี่ยวข้องกับเรื่องนี้ มี repos อื่น ๆ บ้างไหม? เมื่อใดที่เราควรเปลี่ยน พวกเขามีผลกระทบต่อโครงการโมดูล libs อย่างไร จำเป็นสำหรับนักพัฒนา Android หรือไม่?

ใครเป็นผู้รับผิดชอบในการรักษา repos เหล่านั้น?


6
ดังที่ @sgill ได้กล่าวไว้ JFrog เป็นผู้ดูแล Bintray และ JCenter หากคุณมีคำถามเฉพาะเจาะจงใด ๆ ไฟออกไป :)
JBaruch

เพราะ .... Android ;)
Joshua Pinter

คำตอบ:


150

ที่ Bintray ฉันเพิ่ง rebloged โพสต์บล็อกที่มีรายละเอียดมากอธิบายเหตุผลที่ Google ทำการเปลี่ยนแปลงนี้ นี่คือจุดที่สำคัญที่สุด:

  • JCenter เป็นที่เก็บ Java ใน Bintrayซึ่งเป็น repo ที่ใหญ่ที่สุดในโลกสำหรับ Java และ Android OSS ไลบรารีแพ็คเกจและส่วนประกอบ
  • เนื้อหาทั้งหมดใน JCenter ให้บริการผ่าน CDN พร้อมการเชื่อมต่อ HTTPS ที่ปลอดภัย ย้อนกลับไปในช่วงเวลาของการโยกย้าย (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 กลาง (สำหรับการสนับสนุนเครื่องมือเดิม) คุณสามารถทำมันได้จาก Bintray เป็นอย่างดีในการคลิกปุ่มหรือแม้กระทั่งโดยอัตโนมัติ

เกี่ยวกับการปรับปรุงประสิทธิภาพผู้ให้การสนับสนุนนักพัฒนา Android สองคนได้เผชิญ / สังเกตเห็นปัญหาของการจัดทำดัชนีขนาดใหญ่ที่มีศูนย์กลาง Maven

ในคำพูดของTor Norbye :

ฉันรัน AndroidStudio ด้วยไดเรกทอรีการตั้งค่าใหม่ล่าสุดดังนั้นมันจึงไปและเชื่อมต่อ maven กลางและดาวน์โหลดดัชนีสิ่งประดิษฐ์ที่มีอยู่

จากนั้นฉันก็ดูขนาดของไดเรกทอรีของฉัน

My ~ / Library / Cache / AndroidStudioPreview คือ 1.5G และ 1.2G จากนั้นจะถูกควบคุมโดยไดเรกทอรีย่อย“ Maven”

นั่นไร้สาระ เราแทบจะไม่ใช้ดัชนีเลย การใช้งานหลักสำหรับมันคือตัวแก้ไขการพึ่งพาในไดอะล็อกโครงสร้างโครงการ แต่เราไม่จำเป็นต้องมีดัชนีที่คำนวณล่วงหน้าได้ MavenCentral มีการค้นหา JSON ออนไลน์ที่รวดเร็วซึ่งเราสามารถใช้ตามความต้องการเมื่อมีคนค้นหาสิ่งประดิษฐ์ ในhttps://android-review.googlesource.com/#/c/94843/เราได้เพิ่มการตรวจสอบผ้าสำลีซึ่งจะตรวจสอบว่าการพึ่งพาเป็นปัจจุบันและการค้นหาสิ่งประดิษฐ์เพียงไม่กี่อันใกล้เข้ามาทันที

ในระยะสั้นเราไม่ต้องการแคช มันอาจช่วยในการเติมโค้ดให้สมบูรณ์ในไฟล์. gradle และ maven .pom แต่นั่นไม่ใช่ usecase ที่สำคัญที่สุดและแน่นอนว่าไม่ใช่สิ่งที่ผู้ใช้ทุกคนควรจะต้องเสียสละ 1.5G ของความเร็วในการดาวน์โหลดและพื้นที่ใช้งาน อ่านเพิ่มเติมเกี่ยวกับ: ดัชนี Maven มีขนาดใหญ่มาก !

นอกจากนี้คุณอาจพบว่าการอภิปรายสั้น ๆ (1Q และ 1A) ใน Hacker Newsน่าสนใจ


ฉันอยู่กับJFrogบริษัท ที่อยู่เบื้องหลัง และ ดูโปรไฟล์ของฉันสำหรับรายละเอียดและลิงค์


60

ฉันสงสัยเหมือนกันและฉันไม่มีคำตอบที่ชัดเจน แต่คิดว่ามันอาจคุ้มค่าที่จะแบ่งปันสิ่งที่ฉันเรียนรู้ ฉันพบการกล่าวถึงการย้ายจาก Maven Central ไปยัง JCenter ภายในปัญหาเดียวใน Google Codeแต่ไม่พบรายละเอียดเกี่ยวกับสิ่งที่เกิดขึ้นอย่างแน่นอน - ไม่พบการกล่าวถึงในรายการการเปลี่ยนแปลงล่าสุดสำหรับ Android Studio

จากการอ่านบน JCenter มันเป็นแหล่งเก็บข้อมูลด้านหลัง Bintray จาก บริษัท JFrog (ที่ฉันเคยเจอมาก่อนและฉันคิดว่านั่นคือสิ่งที่ 'J' มาจาก) ตามบล็อกของBintray Bintray เป็น superset ของ Maven Centralดังนั้นหากเป็นจริงไม่ควรมีปัญหาเกี่ยวกับการพึ่งพาที่หายไป แต่ฉันคิดว่ามันจะขึ้นอยู่กับสิ่งที่คุณใช้ในโครงการของคุณ - คุณสามารถทำได้โดยตรง ตรวจสอบ repos เนื่องจากทั้งสองมีเว็บไซต์ที่ค้นหาได้ง่าย ดังนั้นสำหรับผู้ที่รักษา repos เหล่านี้เท่าที่ฉันรู้ดีที่สุดมันก็ขึ้นอยู่กับผู้ผลิตของการพึ่งพาเพื่อเพิ่มการพึ่งพาของพวกเขาไปยังแต่ละ repo และถึงเจ้าของ repo เพียงเพื่อรักษาบริการ

ในแง่ของเวลาที่จะเปลี่ยนมันเป็นเรื่องยากที่จะทำงานออก AOSP ยังคงใช้ Maven Central อยู่ฉันคิดว่า (จากการดูเทมเพลตสำหรับแอปพลิเคชัน Android ใหม่) แต่แล้วเทมเพลตนั้นก็ยังคงใช้ Gradle รุ่นเก่ามาก (0.4) เช่นกัน มีปัญหาสองสามข้อเกี่ยวกับผู้อื่นที่มีปัญหาเกี่ยวกับการพึ่งพาจาก jcenter แต่ไม่ได้รายงานมากนักและเป็นไปได้ว่า Google จะสลับไปที่ repo อื่น ๆ ก่อนที่จะปล่อย AS ขั้นสุดท้าย ถ้า Maven Central ยังทำงานได้ดีสำหรับคุณตอนนี้คุณสามารถปิดสวิตช์ได้จนกว่าจะถึงตอนนั้นโดยเฉพาะอย่างยิ่งถ้าคุณกำลังสร้างโซลูชันเชิงพาณิชย์ขนาดใหญ่


5
คุณสามารถค้นหารายชื่อที่เก็บข้อมูลที่สนับสนุน gradle ได้ที่นี่ - รวมถึง Maven Central, JCenter และอื่น ๆ : gradle.org/docs/current/userguide/?hl=th
SGill

11
ในเอกสารของ Gradle เกี่ยวกับที่เก็บข้อมูลกล่าวว่า Maven repo รองรับโปรโตคอลการขนส่ง http เท่านั้นในขณะที่ JCenter รองรับ https Google เป็นแฟนตัวยงของ https ดังนั้นอาจเป็นเพราะพวกเขาเปลี่ยน?
Rob Meeuwisse

2
เพียงแค่อัปเดต - ในฐานะ RC2 ของ Android Studio มันยังคงเป็น JCenter ดังนั้นฉันคิดว่าช่วงเวลาที่เหมาะสมในการเปลี่ยนอาจจะเร็ว ๆ นี้เมื่อ Android Studio ไปถึงขั้นสุดท้ายหลังจากตรวจสอบการอ้างอิงทั้งหมดของคุณแล้ว ...
SGill

5
Central Repository / Maven Central รองรับ https ได้ดี
Manfred Moser

2
อัปเดตในเดือนกุมภาพันธ์ 2015: AS 1.1 RC 1 ยังคงเป็น jcenter () ภายใต้ buildscript / ที่เก็บ
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 repositories ที่ใช้โดย Maven, Gradle, SBT, Ivy และอื่น ๆ รวมถึง NuGet, NPM และ RubyGems

ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้เขียนการจัดการพื้นที่เก็บข้อมูลด้วย Nexus และ Nexus Trainer สำหรับ Sonatype ผู้สนับสนุน Central Repository ฟรีซึ่งเป็นผู้นำโครงการปลั๊กอิน Android Maven และผลักห้องสมุด Android ไปที่ศูนย์กลางโดยสร้างจาก AOSP


3
ตามที่ทีมงานวิศวกรรมเจเอฟเคเอฟทำการร้องขอสิ่งประดิษฐ์จากที่เก็บส่วนกลาง ฉันจะเรียกพร็อกซี่นั้น .. ถ้าคุณต้องการเรียกมันอย่างอื่นก็แล้วแต่คุณ
Manfred Moser

4
เช่นโครงการของฉันเช่น pom ขององค์กรที่ก้าวหน้าหรือปลั๊กอิน maven สำหรับ Android และอื่น ๆ ทั้งหมดที่อยู่ในภาคกลางทั้งหมดจะปรากฏใน jcenter ไม่มีการเผยแพร่ในที่อื่นนอกเหนือจากภาคกลางดังนั้นคุณจึงนำพวกเขาออกจากที่นั่น และนั่นก็ดี Jcenter เป็นเพียงแพลตฟอร์มการแจกจ่ายอื่น
Manfred Moser


5
ฮ่า ๆ .. JCenter ดาวน์โหลดจาก Central เท่านั้นแล้วส่งต่อไปยังผู้ใช้
Manfred Moser

2
"ฉันทำงานให้กับ บริษัท ที่อยู่เบื้องหลัง Maven Central" อย่างง่ายจะเพียงพอ นั่นไม่ใช่ลายเซ็นต์ของสโลแกน stackoverflow.com/help/behaviorระบุอย่างชัดเจนว่า "... คุณต้องเปิดเผยความร่วมมือในคำตอบของคุณ"
Flow

8

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

บทความนี้สามารถตอบคำถามคุณ

ตอนแรก Android Studio เลือก Maven Central เป็นที่เก็บเริ่มต้น เมื่อคุณสร้างโครงการใหม่จาก Android Studio เวอร์ชันเก่า mavenCentral () จะถูกกำหนดโดยอัตโนมัติใน build.gradle

แต่ปัญหาใหญ่ของ Maven Central คือมันไม่ง่ายสำหรับนักพัฒนา เป็นการยากที่จะอัปโหลดไลบรารีไปยัง เพื่อให้สามารถทำเช่นนั้นนักพัฒนาจะต้องมีระดับ geeky และด้วยเหตุผลเพิ่มเติมเช่นความกังวลด้านความปลอดภัยและอื่น ๆ ทีม Android Studio ตัดสินใจเปลี่ยนที่เก็บเริ่มต้นเป็น jcenter แทนเนื่องจากคุณจะเห็นว่าเมื่อคุณสร้างโครงการใหม่จาก Android Studio เวอร์ชันล่าสุด jcenter () จะถูกกำหนดโดยอัตโนมัติ แทน mavenCentral ()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.