Repositorios de Android buildscript: jcenter VS mavencentral

239

La última vez que usé Android Studio, generó .gradlearchivos con mavencentral()repositorios de buildscript, mientras que ahora los hay jcenter().

¿Alguien podría explicar los problemas relacionados con esto? ¿Hay otros repositorios? ¿Cuándo deberíamos cambiarlos? ¿Qué impacto tienen en proyectos, módulos, libs? ¿Algún otro elemento esencial para los desarrolladores de Android?

¿Quién es responsable de mantener esos repositorios?

Jacob
fuente
66
Como @sgill mencionó, JFrog son los mantenedores de Bintray y JCenter. Si tienes alguna pregunta específica, dispara :)
JBaruch
Porque ... Android. ;)
Joshua Pinter el

Respuestas:

150

En Bintray acabo de reubicar una publicación de blog muy detallada que describe las razones por las cuales Google realizó este cambio. Aquí están los puntos más importantes:

  • JCenter es un repositorio de Java en Bintray , que es el repositorio más grande del mundo para bibliotecas, paquetes y componentes de Java y Android OSS.
  • Todo el contenido en JCenter se sirve a través de un CDN, con una conexión segura HTTPS. En el momento de la migración (Android Studio 0.8) El repositorio central de maven 2 era solo HTTP y HTTPS no era compatible. Referencia: 51.6.2. Depósito central de Maven .
  • jcenter()es un superconjunto de mavenCentral(), que abarca muchos repositorios y artefactos adicionales.
  • En diferentes escenarios y de diferentes países, Bintray es más rápido que Maven Central (por ejemplo, de Israel). En otros está muy cerca. Dado que Maven Central y Bintray usan CDN diferentes que favorecen de forma adaptativa las regiones, esto podría cambiar en ambos sentidos.
  • Bintray tiene un enfoque diferente para la identificación de paquetes que el Maven Central heredado. Este es un asunto de seguridad grande y serio. Es importante.
  • Si realmente necesita llevar su paquete a Maven Central (para admitir herramientas heredadas), también puede hacerlo desde Bintray, con un clic de un botón o incluso automáticamente .

Con respecto a las mejoras de rendimiento, un par de defensores de los desarrolladores de Android se habían enfrentado / notado el problema de la indexación enorme con Maven Central.

En palabras de Tor Norbye :

Ejecuté AndroidStudio con un nuevo directorio de configuración, así que fui y conecté a Maven Central y descargué un índice de los artefactos disponibles.

Luego, vi el tamaño de mi directorio.

Mi ~ / Library / Cache / AndroidStudioPreview es 1.5G, y 1.2G de esos son tomados por el subdirectorio "Maven".

Eso es ridículo. Apenas usamos el índice en absoluto. Su uso principal es el editor de dependencias en el cuadro de diálogo Estructura del proyecto, pero realmente no necesitamos tener un índice precalculado para ello. MavenCentral tiene una búsqueda JSON rápida en línea que podemos usar a pedido cuando alguien busca artefactos. En https://android-review.googlesource.com/#/c/94843/ agregamos una verificación de pelusa que verifica si las dependencias están actualizadas, y la búsqueda de un puñado de artefactos es casi instantánea.

En resumen, realmente no necesitamos el caché; Puede ayudar con la finalización del código en archivos .gradle y maven .pom, pero eso no es un caso de uso súper importante, y ciertamente no es algo que todos los usuarios deberían sacrificar 1.5G de velocidad de descarga y espacio en disco para tener la posibilidad de algún día hacerlo. Lea más sobre: ​​¡ El índice de Maven es enorme !

Además, puede encontrar interesante esta breve discusión (1T y 1A) en Hacker News .


Estoy con JFrog , la compañía detrás y , vea mi perfil para más detalles y enlaces.

JBaruch
fuente
60

Me preguntaba lo mismo, y no tengo una respuesta definitiva, pero pensé que valdría la pena compartir lo (poco) que había aprendido. Encontré una mención del cambio de Maven Central a JCenter dentro de un problema en Google Code , pero no detecté detalles sobre cuándo sucedió exactamente; no pude encontrar mención en la lista de cambios recientes para Android Studio.

Al leer sobre JCenter, es el repositorio detrás de Bintray, de la compañía JFrog (con quien me he encontrado antes, y supongo que de ahí proviene la 'J'). Según el blog de Bintray, Bintray es un superconjunto de Maven Central , por lo que si eso es cierto no debería haber problemas con las dependencias faltantes, pero supongo que dependerá exactamente de lo que esté usando en sus proyectos: siempre podría revisa los repositorios ya que ambos tienen buenos sitios web fáciles de buscar Entonces, para quién mantiene estos repositorios, como mejor sé, depende de los productores de las dependencias agregar sus dependencias a cada repositorio, y hasta el propietario del repositorio solo para mantener el servicio.

En términos de cuándo cambiar, es difícil hacer ejercicio. Creo que AOSP todavía usa Maven Central (al buscar en Plantillas para una nueva aplicación de Android), pero esa plantilla también sigue usando una versión de Gradle muy antigua (0.4). Hay un par de problemas sobre otros que tienen problemas con las dependencias de jcenter, pero no se informa mucho, y es posible que Google cambie nuevamente a otro repositorio antes de lanzar AS final. Si Maven Central aún funciona bien para usted por ahora, podría retrasar el cambio hasta entonces, especialmente si está creando grandes soluciones comerciales.

SGill
fuente
55
También puede encontrar la lista de repositorios compatibles con gradle aquí, incluidos Maven Central, JCenter y otros: gradle.org/docs/current/userguide/…
SGill
11
En la documentación de Gradle sobre repositorios dice que el repositorio de Maven solo admite el protocolo de transporte http, mientras que JCenter admite https. Google es un gran admirador de https, entonces ¿tal vez esa sea su razón para cambiar?
Rob Meeuwisse
2
Solo una actualización: a partir de RC2 de Android Studio, sigue siendo JCenter, por lo que creo que un buen momento para cambiar podría ser pronto, cuando Android Studio
finalice
55
El repositorio central / Maven Central admite https muy bien.
Manfred Moser
2
Actualización de febrero de 2015: AS 1.1 RC 1, todavía jcenter () en buildscript / repositorios
Jose_GD
26

No importa cuál sea el valor predeterminado en el archivo build.gradle: en un esfuerzo de desarrollo basado en equipo, realmente debería usar un administrador de repositorios como Sonatype Nexus o JFrog Artifactory y no hacer referencia a esos repositorios ascendentes directamente.

Esto le permitirá ahorrar mucho ancho de banda, combinar ambos y muchos otros repositorios y administrarlo todo en su propia red.

En términos de Maven Central vs JCenter. JCenter es un esfuerzo de JFrog para abrazar, extender (¿y exterminar?) Maven Central. Maven Central es el repositorio predeterminado en Maven, SBT y otros, mientras que Gradle ha cambiado a JCenter. Esto no es sorprendente teniendo en cuenta que JFrog y Gradleware trabajan juntos como empresas. Dado que Android SDK usa Gradle como sistema de compilación ahora, el paso a JCenter fue el siguiente paso lógico.

JCenter en sí mismo es una delgada chapa en la parte superior de Maven Central. Lo representa (más o menos exitosamente) y agrega componentes adicionales. Ambos están alojados en redes CDN y tienen un alto rendimiento. Maven Central es el objetivo de todos los proyectos de código abierto de Eclipse, Apache y la mayoría de los demás, y sin él, JCenter estaría prácticamente vacío.

Usar cualquiera de ellos funcionará bien, pero sugeriría ir directamente a la fuente donde pueda y, además, tomar el control utilizando un administrador de repositorio. Nexus Open Source, por ejemplo, es gratuito y tiene soporte para repositorios de Maven como los utilizados por Maven, Gradle, SBT, Ivy y otros, así como soporte de NuGet, NPM y RubyGems.

Descargo de responsabilidad: soy el autor de Repository Management con Nexus y Nexus Trainer para Sonatype, el patrocinador del Central Repository gratuito, el líder del proyecto del complemento Android Maven y he empujado algunas bibliotecas de Android a Central mediante la reconstrucción desde AOSP.

Manfred Moser
fuente
3
Según el equipo de ingeniería de JFrog, solicita dinámicamente artefactos del repositorio Central. Llamaría a ese proxy ... si quieres llamarlo de otra manera, depende de ti.
Manfred Moser
44
Por ejemplo, mis proyectos como la organización progresiva pom o el complemento Android Maven y todos los demás que están en Central aparecen en jcenter. Ninguno de ellos se publica en otro lugar que Central, por lo que los ha tomado desde allí. Y eso está bien. Jcenter es solo otra plataforma de distribución.
Manfred Moser
55
Jaja. JCenter solo descarga desde Central y luego pasa a los usuarios.
Manfred Moser
2
Un simple "Trabajo para la compañía detrás de Maven Central" sería suficiente. Esa no es una firma de lema. stackoverflow.com/help/behavior establece claramente que "... debe divulgar su afiliación en sus respuestas".
Flujo
8

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

Este artículo puede responder a su pregunta.

Al principio, Android Studio eligió Maven Central como repositorio predeterminado. Una vez que cree un nuevo proyecto desde la versión anterior de Android Studio, mavenCentral () se definiría automáticamente en build.gradle.

Pero el gran problema de Maven Central es que no es amigable para los desarrolladores. Es sorprendentemente difícil cargar la biblioteca. Para poder hacerlo, el desarrollador debe estar en algún nivel geek. Y con alguna razón más, por ejemplo, un problema de seguridad, etc., el equipo de Android Studio decidió cambiar el repositorio predeterminado a jcenter, ya que puede ver que una vez que cree un nuevo proyecto desde la última versión de Android Studio, jcenter () se definiría automáticamente en lugar de mavenCentral ().

taotao
fuente