Maven – ¿Porqué necesito un administrador de repositorios?

octubre 28, 2011

Sin duda puedes utilizar Maven sin un administrador de repositorios. Pero esto sólo lo recomiendo si eres un programador solitario, no cuando formas parte de un equipo de desarrollo. Pero esta pregunta ya fue respondida en el sitio de Maven, así que sólo pondré aquí la traducción.

¿Porqué necesito un administrador de repositorios?

Los administradores de repositorios de Maven cumplen 2 propósitos: actúan como intermediarios altamente configurables entre tu organización y los repositorios públicos de Maven y también proveen a una organización con un contenedor para sus propios artefactos generados.

Usar un intermediario a un repositorio de Maven tiene ciertos beneficios. Intermediar acelera la compilación a lo largo de tu organización al instalar una copia local de todos los artefactos del repositorio central de Maven. Si un desarrollador en tu organización necesita descargar la versión 2.5 del Spring Framework y utilizas un administrador de repositorios; las dependencias (y las dependencias de las dependencias) necesitan ser descargadas del repositorio remoto sólo una vez. Con una conexión a Internet de alta velocidad esto no es una preocupación, pero si constantemente le pides a tus desarrolladores que descarguen cientos de megabytes de dependencias de terceros, los ahorros reales serán el tiempo que le toma a Maven buscar nuevas versiones de las dependencias y el tiempo para descargarlas. Proveer las dependencias de Maven desde un repositorio local puede ahorrarte cientos de solicitudes a través de HTTP, y, en la compilación de proyectos muy grandes y complejos, puede ahorrarte minutos.

Si tu proyecto confía en cierto número de dependencias de tipo SNAPSHOT, Maven necesita verificar si hay actualizaciones de estas dependencias. Dependiendo de la configuración de tus repositorios remotos, Maven buscará actualizaciones de estos SNAPSHOTS periodicamente, o incluso pudiera estar buscando actualizaciones cada que compilas. Cuando Maven busca actualizaciones necesita interrogar al repositorio remoto acerca de la última versión del SNAPSHOT. Dependiendo de tu conexión a Internet y la carga en el repositorio central de Maven, este proceso de actualización puede agregar segundos al tiempo de compilación por cada SNAPSHOT. Cuando tienes un administrador de repositorios local actuando como intermediario, tu administrador de repoistorios va a buscar actualizaciones de los SNAPSHOTS de forma regular y programada, y tu aplicación será capaz de interactuar con el repositorio local. Si desarrollas software que depende de varios SNAPSHOTS, utilizar un administrador de repositorios localmente muchas veces puede reducir minutos al tiempo de compilación de un proyecto grande y complejo, la búsqueda de actualizaciones en el repositorio central que toma entre 5 y 10 segundos se va a ejecutar en milisegundos.

Además de los simples ahorros en tiempo y ancho de banda, un administrador de repositorios provee a una organización con el control sobre lo que es descargado por Maven. Puedes incluir o excluir artefactos específicos del repositorio público, y el tener este nivel de control sobre lo que es descargado desde el repositorio central de Maven es un prerequisito para las organizaciones que necesitan un estricto control sobre las dependencias que son usadas a lo largo y ancho de la organización. Una organización que quiere establecer un estándar sobre una versión específica de una dependencia como Hibernate o Spring puede asegurarse de que se cumpla este estándar al sólo proveer acceso a una versión específica de un artefacto en el administrador de repositorios. Otras organizaciones pudieran estar preocupadas de asegurarse que todas las dependencias externas tengan una licencia compatible con las normas legales de esa organización. Si una corporación produce una aplicación que será distribuida, tal vez quiera asegurarse de no agregar desapercibidamente una dependencia a una librería de terceros que este cubierta por una licencia de tipo copy-left como GPL. Los administradores de repositorios proveen el nivel de control que una ogranización necesita para asegurarse que la arquitectura y políticas sean seguidas.

Ademas de los beneficios de mediar el acceso a los repositorios remotos, un administrador de repositorios ha probado ser escencial para la completa adopción de Maven. A menos que esperes que cada miembro de tu organización descargue y compile todos y cada uno de los proyectos internos, querrás proveer a los desarrolladores y departamentos de un mecanismo para compartir los artefactos de proyectos internos tanto SNAPSHOTS como versiones finales. Un administrador de repositorios de Maven provee a tu organización de dicho mecanismo. Una vez que instalas un administrador de repositorios de Maven, puedes comenzar a utilizar Maven para colocar tus snapshots y releases en un repositorio personalizado manejado por el administrador de repositorios. Con el tiempo, este contenedor central de proyectos internos se convierte en la estructura para la colaboración entre diferentes equipos de desarrollo.

También vale la pena mencionar el siguiente párrafo que encontré en uno de los libros de Sonatype, en la sección de agregar un repositorio a un grupo:

… te has encontrado con una situación en la que necesitas agregar dos repositorios a un proyecto para que se descarguen dos librerías (Google Caja and Google OAuth) que no están disponibles en el repositorio central de Maven. Si no utilizaras un administrador de repositorios, tendrías que agregar estos repositorios en la sección correspondiente del archivo POM del proyecto, ó tendrías que pedirle a todos tus desarrolladores que modificaran su archivo ~/.m2/settings.xml para hacer referencia a los dos nuevos repositorios. En lugar de eso, utilizaste el administrador de repositorios Nexus para agregar los dos repositorios al grupo público. Si todos los desarrolladores tienen la configuración para usar el grupo público de Nexus, puedes modificar o agregar nuevos repositorios sin tener que pedirle a tus desarrolladores que modifiquen su configuración, y además has obtenido cierto control sobre los repositorios que pudieran ser utilizados por tu equipo de desarrollo.

Fuentes:
http://maven.apache.org/repository-management.html
http://www.sonatype.com/books/nexus-book/reference/maven-sect-adding-to-group.html

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: