Android репозитории buildscript: jcenter VS mavencentral

239

В прошлый раз, когда я использовал Android Studio, он генерировал .gradleфайлы с mavencentral()репозиториями buildscript, тогда как сейчас есть jcenter().

Может ли кто-нибудь объяснить проблемы, связанные с этим. Есть ли другие репо? Когда мы должны их поменять? Какое влияние они оказывают на проекты, модули, библиотеки? Какие-нибудь другие предметы для разработчиков Android?

Кто несет ответственность за поддержание этих репо?

Иаков
источник
6
Как упомянул @sgill, JFrog является сопровождающим Bintray и JCenter. Если у вас есть какие-то конкретные вопросы,
стреляйте
Потому что .... Android. ;)
Джошуа Пинтер
i.pinimg.com/originals/a2/cc/b2/…
Даниэль С. Яицков

Ответы:

150

В Bintray я только что сделал очень подробный пост в блоге с описанием причин, по которым Google сделал это изменение. Вот самые важные моменты:

  • JCenter - это репозиторий Java в Bintray , который является крупнейшим в мире репо для библиотек, пакетов и компонентов 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 Central (для поддержки устаревших инструментов), вы также можете сделать это из Bintray, одним нажатием кнопки или даже автоматически .

Что касается повышения производительности, пара защитников Android-разработчиков столкнулись / заметили проблему огромной индексации с помощью Maven Central.

По словам Тора Норби :

Я запустил AndroidStudio с новым каталогом настроек, и он подключился к maven central и загрузил индекс доступных артефактов.

Затем мне довелось посмотреть размер моего каталога.

Мой ~ / Library / Cache / AndroidStudioPreview имеет размер 1,5 ГБ, из которых 1,2 ГБ занято подкаталогом «Maven».

Это вздор. Мы практически не используем индекс. Основное использование для этого - редактор зависимостей в диалоге структуры проекта, но нам действительно не нужен предварительно вычисленный индекс для него. MavenCentral имеет быстрый онлайн-поиск JSON, который мы можем использовать по запросу, когда кто-то ищет артефакты. В https://android-review.googlesource.com/#/c/94843/ мы добавили проверку данных, которая проверяет актуальность зависимостей, и поиск нескольких артефактов близок к мгновенному.

Короче говоря, нам действительно не нужен кеш; это может помочь с завершением кода в файлах .gradle и maven .pom, но это не очень важный сценарий использования, и, конечно, это не то, что всем пользователям придется пожертвовать 1,5 ГБ скорости загрузки и дискового пространства, чтобы иметь возможность сделать один день. Читайте больше на: Индекс Maven огромен !

Кроме того, вы можете найти это очень короткое (1Q и 1A) обсуждение в Hacker News интересным.


Я с JFrog , компанией, стоящей за и см. мой профиль для деталей и ссылок.

JBaruch
источник
60

Мне было интересно то же самое, и у меня нет однозначного ответа, но я подумал, что, возможно, стоит поделиться тем, что (мало) я узнал. Я обнаружил упоминание о переходе от Maven Central к JCenter в рамках одной проблемы в Google Code , но не нашел подробностей о том, когда именно это произошло, - не смог найти упоминания в списке последних изменений для Android Studio.

Из прочтения на JCenter, это репозиторий Bintray от компании JFrog (с кем я сталкивался раньше, и, я думаю, именно отсюда и появился «J»). Согласно блогу Bintray, Bintray является надмножеством Maven Central , поэтому, если это правда, не должно быть проблем с отсутствующими зависимостями, но я думаю, что это будет зависеть от того, что именно вы используете в своих проектах - вы всегда можете напрямую проверьте репо, поскольку у обоих есть хорошие легко доступные для поиска веб-сайты. Таким образом, для тех, кто поддерживает эти репозитории, насколько мне известно, сами производители зависимостей добавляют свои зависимости в каждое репо, а владелец репо - просто для обслуживания сервиса.

С точки зрения того, когда переключаться, трудно решить. Я думаю, что AOSP все еще использует Maven Central (из поиска шаблонов для нового приложения для Android), но тогда этот шаблон также все еще использует очень старую версию Gradle (0.4). Есть пара проблем, связанных с тем, что у других есть проблемы с зависимостями от jcenter, но о которых не так много сообщалось, и вполне возможно, что Google снова переключится на какое-то другое хранилище перед выпуском AS final. Если Maven Central все еще работает нормально для вас, вы можете отложить переключение до тех пор, особенно если вы создаете крупные коммерческие решения.

SGill
источник
5
Вы также можете найти список поддерживаемых Gradle репозиториев здесь, включая Maven Central, JCenter и другие: gradle.org/docs/current/userguide/…
SGill
11
В документации Gradle о репозиториях говорится, что репозиторий Maven поддерживает только транспортный протокол http, а JCenter поддерживает https. Google - большой поклонник https, так что, может быть, в этом их причина?
Роб Меуисс
2
Просто обновление - что касается RC2 Android Studio, то это все еще JCenter, так что я думаю, что хорошее время для переключения может наступить скоро, когда Android Studio выйдет в финал, после проверки всех ваших зависимостей…
SGill
5
Центральный репозиторий / Maven Central прекрасно поддерживает https.
Манфред Мозер
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, используемые Maven, Gradle, SBT, Ivy и другими, а также поддержку NuGet, NPM и RubyGems.

Отказ от ответственности: я являюсь автором управления репозиторием с Nexus и инструктором по Nexus для Sonatype, спонсора бесплатного Центрального репозитория, лидера проекта плагина Android Maven, и переместил некоторые библиотеки Android в Central путем восстановления из AOSP.

Манфред Мозер
источник
3
По словам команды разработчиков JFrog, она динамически запрашивает артефакты из центрального хранилища. Я бы назвал это прокси ... если вы хотите назвать это как-нибудь другое, зависит только от вас.
Манфред Мозер
4
Например, мои проекты, такие как прогрессивная организация pom или плагин android maven и все остальные, которые находятся в Central, отображаются в jcenter. Ни один из них не публикуется нигде, кроме Центрального, так что вы взяли их оттуда. И это нормально. Jcenter - это просто еще одна платформа для распространения.
Манфред Мозер
2
например, bintray.com/bintray/jcenter/… или bintray.com/bintray/jcenter/…
Манфред Мозер
5
Ха-ха ... JCenter загружает только из Центрального и затем передает пользователям.
Манфред Мозер
2
Простого «Я работаю в компании, стоящей за Maven Central» было бы достаточно. Это не подпись под слоганом. stackoverflow.com/help/behavior четко заявляет, что «... вы должны раскрывать свою принадлежность в своих ответах».
Поток
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 ().

Taotao
источник