Репозитории скриптов сборки Android: jcenter VS mavencentral

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

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

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


person Jacob    schedule 20.07.2014    source источник
comment
Как упомянул @sgill, JFrog поддерживает Bintray и JCenter. Если есть конкретные вопросы, пишите :)   -  person JBaruch    schedule 11.08.2014
comment
Потому что.... Андроид. ;)   -  person Joshua Pinter    schedule 23.01.2015


Ответы (4)


В 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.

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

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

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

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

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

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

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


Я работаю в JFrog, компании, которая стоит за bintray и artifactory, подробности и ссылки см. в мой профиль.< / суп>

person JBaruch    schedule 11.02.2015

Мне было интересно то же самое, и у меня нет окончательного ответа, но я подумал, что, возможно, стоит поделиться тем, что (немного) я узнал. Я нашел упоминание о переходе с 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 все еще работает нормально для вас, вы можете отложить переключение до тех пор, особенно если вы создаете крупные коммерческие решения.

person SGill    schedule 23.07.2014
comment
Вы также можете найти здесь список поддерживаемых Gradle репозиториев, включая Maven Central, JCenter и другие: gradle.org/docs/current/userguide/ - person SGill; 24.07.2014
comment
В документации Gradle о репозиториях говорится, что репозиторий Maven поддерживает только транспортный протокол http, а JCenter поддерживает https. Google — большой поклонник https, так что, возможно, это и есть причина их перехода? - person Rob Meeuwisse; 13.11.2014
comment
Просто обновление - начиная с RC2 Android Studio, это все еще JCenter, поэтому я думаю, что скоро наступит подходящее время для переключения, когда Android Studio станет окончательным, после проверки всех ваших зависимостей.... - person SGill; 27.11.2014
comment
Центральный репозиторий/Maven Central отлично поддерживает https. - person Manfred Moser; 12.02.2015
comment
Обновление за февраль 2015 г.: AS 1.1 RC 1, все еще jcenter() в buildscript/repositories - person Jose_GD; 18.02.2015

Неважно, какое значение по умолчанию указано в файле 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 Plugin и переместил некоторые библиотеки Android в Central путем восстановления из AOSP.

person Manfred Moser    schedule 09.02.2015
comment
По словам инженерной группы JFrog, он динамически запрашивает артефакты из центрального репозитория. Я бы назвал этот прокси .. если вы хотите назвать его как-то еще, это на ваше усмотрение. - person Manfred Moser; 12.02.2015
comment
Например. мои проекты, такие как прогрессивная организация pom или плагин android maven, и все остальные, которые находятся в Central, отображаются в jcenter. Ни один из них не опубликован нигде, кроме Central, поэтому вы взяли их оттуда. И это нормально. Jcenter — это просто еще одна платформа для распространения. - person Manfred Moser; 12.02.2015
comment
Ха-ха.. JCenter только загружает из Central, а затем передает пользователям. - person Manfred Moser; 13.02.2015
comment
Bintray никогда не проксировал Maven Central, по крайней мере, в этой реальности. Вы можете называть это как хотите, но в реальном мире Bintray никогда не отправлял ни одного HTTP-запроса к Maven Central. - person JBaruch; 16.02.2015
comment
Барух, Давайте придерживаться фактов. Например. Плагин Android Maven находится в jcenter, хотя он был развернут ТОЛЬКО в центральном репозитории. Попробуйте wget jcenter.bintray.com/com/simpligility/maven/plugins/ для себя. Поэтому я делаю вывод, что jcenter каким-то образом проксировал, скопировал или что-то еще из Central. И меня это вполне устраивает. - person Manfred Moser; 16.02.2015
comment
Как указал ваш ответчик @JBaruch, похоже, вы связаны с Maven Central/Sonatype. Если это так, то я думаю, что вы должны указать эту принадлежность в своем ответе в соответствии с stackoverflow.com/help/behavior. - person Flow; 13.03.2015
comment
Мои профили @Flow на stackoverflow/stackexchange, в linkedin, Google+ и других местах указывают на мою принадлежность к Sonatype. В вашей связанной точке поведения прямо указано: «Не используйте подпись, слоганы и т. д.», однако вы просите меня сделать именно это. Я отвечаю на множество вопросов, и я связан со многими проектами. Было бы плохо засорять все мои ответы этими оговорками о том, с кем я связан. Я также не хотел бы, чтобы Jbaruch раскрывал свою принадлежность к jfrog/bintray или косвенно Gradle в каждом ответе. Вот для чего нужен профиль. - person Manfred Moser; 13.03.2015
comment
И @Flow, если вы хотите обсудить это дальше, я предлагаю перенести это в мета. Например. имейте в виду, что принадлежность со временем меняется (иногда СИЛЬНО), и мы не хотели бы постоянно обновлять ответы, чтобы отражать это. - person Manfred Moser; 13.03.2015
comment
Простой работы в компании, стоящей за Maven Central, было бы достаточно. Это не подпись слогана. stackoverflow.com/help/behavior четко указывает, что ... вы должны раскрывать свою принадлежность в своих ответах. - person Flow; 14.03.2015
comment
Я думаю, что также не имеет значения, что принадлежность меняется со временем. Важно то, что на момент написания этой статьи вы работали в компании, продающей продукт, который вы упомянули в своем ответе, и о котором идет речь в этом вопросе. - person Flow; 14.03.2015
comment
Я не согласен, но обновил, чтобы вы были счастливы ;-), Баруху, вероятно, тоже следует сделать это, поскольку он является общественным защитником Jcenter и JFrog, но я оставляю это на усмотрение его сообщества. - person Manfred Moser; 14.03.2015
comment
Манфред, по крайней мере, я четко указываю это в своем профиле. Мне потребовалось некоторое время, чтобы в письменной форме найти вашу связь с Sonatype. Не буду утверждать, что вы намеренно это скрываете, но это точно не так очевидно, как у меня. - person JBaruch; 16.03.2015
comment
Я просто ношу много шляп и делаю много вещей. Его в списке, как и все другие действия. - person Manfred Moser; 16.03.2015

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 заключается в том, что он неудобен для разработчиков. Удивительно сложно загрузить библиотеку. Чтобы иметь возможность сделать это, разработчик должен быть на каком-то уровне гиков. И по еще одной причине, например, из-за проблем с безопасностью и т. Д., Команда Android Studio решила вместо этого переключить репозиторий по умолчанию на jcenter, поскольку вы можете видеть, что после создания нового проекта из последней версии Android Studio jcenter() будет автоматически определен вместо mavenCentral().

person taotao    schedule 12.08.2015