tutorial pom java maven-2 repository maintenance

java - pom - maven tutorial



¿Consejos para mantener un repositorio interno de Maven? (7)

Estoy interesado en mantener un repositorio de Maven 2 para mi organización. ¿Cuáles son algunos de los indicadores y dificultades que podrían ayudar?

¿Cuáles son las pautas que deben seguir los usuarios al configurar estándares para descargar o publicar sus propios artefactos en el repositorio al liberar su código? ¿Qué tipo de gobernanza / reglas tienes para este tipo de cosas? ¿Qué incluye al respecto en la guía / documentación de su desarrollador?

ACTUALIZACIÓN : Nos pusimos de pie en Nexus y estamos muy contentos con él, seguimos la mayoría de las pautas de Sal y no hemos tenido ningún problema. Además, hemos restringido el acceso de implementación y la compilación / implementación automatizada de artefactos de instantáneas a través de un servidor Hudson CI. Hudson puede analizar todas las dependencias del proyecto en sentido ascendente / descendente, por lo que si un problema de compilación, un fallo de prueba o alguna otra infracción hace que la compilación se rompa, no se producirá ninguna implementación. Esté cansado de hacer implementaciones de instantáneas en Maven2 / Maven3, ya que los metadatos han cambiado entre las dos versiones. La estrategia de implementación de instantáneas "solo Hudson" mitigará esto. No utilizamos el complemento de lanzamiento, pero escribimos algunas tuberías alrededor del complemento de versiones cuando se va a mover una instantánea para liberar. También usamos m2eclipse y parece funcionar muy bien con Nexus, ya que desde el archivo de configuración puede ver Nexus y sabe indexar la información de artefactos para buscar desde allí. (Aunque he tenido que modificar algunas de esas configuraciones para que indexe completamente nuestras instantáneas internas). También le recomiendo que implemente un archivo fuente con sus artefactos como práctica estándar si está interesado en hacerlo. Lo configuramos en un super POM.

ACTUALIZACIÓN2 : Me he encontrado con este documento técnico de Sonatype que detalla las diferentes etapas de adopción / madurez, cada una con diferentes objetivos de uso para un administrador de repositorio de Maven.



Como la PREGUNTA ORIGINAL (problemas técnicos a considerar cuando se construye un repositorio M2), recomendaría crear un usuario de solo lectura para navegar por el repositorio y el usuario administrativo por administrador (dicho: un usuario de solo lectura para todos aquellos usuarios que no están administradores). Además, recomendaría generar imágenes de respaldo periódicamente (¿quizás una vez al día?). Es muy importante si el repositorio es grande o si instala sus propios artefactos de vez en cuando.

Por último, pero no menos importante, al agregar nuevos repositorios remotos, debe agregar filtros de inclusión / exclusión para que la búsqueda de artefactos en el repositorio se realice con mayor rapidez.

Hay muchos otros problemas a considerar, pero estos son los principales problemas que he encontrado al administrar un repositorio interno de Maven.

Para el registro, estoy usando tanto Nexus como Artifactory; Puedo afirmar claramente que, si bien Nexus es muy simple y operativo (aunque a veces tengo problemas con el proceso de instalación en Ubuntu), su versión gratuita no puede competir con la edición comunitaria (gratuita) de Artifactory. Excluyendo la impresionante interfaz de usuario web 2 de Artifactory, sus características principales, como la gestión de seguridad, las copias de seguridad periódicas y los problemas de accesibilidad son mucho más allá de las de Nexus.



Estoy usando Artifactory, y me encanta la interfaz de usuario y la facilidad de implementación / mantenimiento. Dicho esto, nunca he usado Nexus, y realmente no puedo ayudarte con una comparación de características adecuada.

Aquí hay algunas cosas que realmente me gustan de Artifactory (ten en cuenta que Nexus puede tener estas características también):

  1. Interfaz web 2.0 agradable.
  2. La capacidad de importar su repositorio local de Maven para ayudarlo a comenzar.
  3. Facilidad de integración con los servidores LDAP existentes para la seguridad (soy un gran fanático de un único repositorio para almacenar credenciales).

Dado que en realidad solo hay dos importantes implementaciones de Maven Repository, si realmente quieres asegurarte de haber tomado la decisión correcta, te recomiendo que pruebes ambos y que elijas lo que más te guste.


Quizás esto sea obvio, pero, para reproducibilidad, los desarrolladores nunca deberían sobrescribir los artefactos, deberían ser nuevas versiones.

Esto también se aplica a los repositorios anteriores. Si descarga la versión 1.2.3 de Apache-commons, nunca debe descargarla nuevamente. Los arreglos provienen de las últimas versiones, no se aplican a las versiones existentes.


Recomendaría configurar un servidor nexus con al menos cuatro repositorios. Yo no recomendaría artefactos. La versión gratuita de nexus está perfectamente bien para un equipo de desarrollo de menos de 20 en menos de tres grupos. Si tiene más usuarios que eso, hágase un favor y pague por la versión de Sonatype. La integración LDAP se paga sola.

  1. Liberación interna
  2. Instantánea interna
  3. Tercera parte interna para el código utilizado en casa que proviene de fuentes externas o para versiones de terceros aprobadas. Ponga los controladores JDBC, javax. * Y las cosas de los clientes y socios aquí.
  4. Proxy externo proxy común para todas las fuentes habituales como m2, codehaus, etc.

Configure Nexus para hacer lo siguiente para repositorios internos

  1. Eliminar instantáneas antiguas en intervalos regulares
  2. Eliminar instantáneas en el lanzamiento
  3. Construir archivos de índice. Esto acelera las construcciones locales también

Tenga un archivo settings.xml común que use estas cuatro y solo estas cuatro fuentes. Si necesita personalizar más allá de esto, intente mantener una parte común del archivo de configuración y use perfiles para las diferencias. No permita que sus clientes simplemente configuren su propia configuración o terminará con un código que se basa en una máquina pero no en otra.

Proporcione un proxy común para sus clientes. En Nexus, puede agregar un montón de proxies a las fuentes comunes de Maven (Apache, JBoss, Codehaus) y tener un solo proxy expuesto a los clientes internos. Esto hace que agregar y eliminar fuentes de sus clientes sea mucho más fácil.

No mezcle artefactos internos y de terceros en el mismo repositorio. Nexus le permite agregar tarros a un repositorio interno a través de una interfaz gráfica de usuario web. Recomiendo esto como la forma de agregar sus controladores JDBC y otro código externo a terceros. La interfaz de usuario es bastante agradable de usar en comparación con la mayoría de los programas empresariales .

Defina un POM principal común que defina la instantánea interna y publique los repositorios a través de la etiqueta distributionManagement . Sé que mucha gente te dice que no hagas esto. Y aunque admito libremente que hay todo tipo de problemas al hacer esto, funciona bien si los clientes solo crearán versiones e instantáneas que se implementarán en un único repositorio interno.

Si tiene un repositorio Maven mal administrado , cree un quinto repositorio llamado Legacy y coloque todos los repositorios allí. Configure una tarea cron para eliminar archivos antiguos del legado una vez que tengan un año de antigüedad. Eso les da a todos un año para salir y actualizar sus poms.

Establezca una convención de nomenclatura fácil de cumplir para los artefactos internos. Prefiero GroupID de Department.Function.Project y un ArtifactId para ese nombre de componente . Para los repositorios internos, es probable que com / org / net y el nombre de la compañía sean irrelevantes. Y mal si la empresa cambia su nombre. Es mucho menos probable que se cambie el nombre del departamento de ventas, contabilidad o inventario.