2010-02-08 11 views
44

¿Cuál es el mejor lugar para especificar repositorios necesarios para proyectos maven, pom.xml o settings.xml? ¿Cuáles son los pros y los contras de cada ubicación? ¿Cuál es la mejor práctica?¿Cuál es el mejor lugar para especificar repositorios maven, pom.xml o settings.xml?

Me parece que la definición de los repositorios en el POM es mejor para un número de razones:

  • Reproducibilidad: Los artefactos dependientes están viniendo de un lugar conocido que se declara explícitamente en el POM. También hay menos oportunidades para que los repositorios mal configurados de un usuario causen problemas.
  • Portabilidad: Este POM se construirá en la máquina de cualquier persona con maven instalado. No hay requisitos adicionales en configuraciones de repositorio configuradas por el usuario adicionales.
  • Facilidad de uso: es más fácil para los nuevos desarrolladores recuperar y construir el proyecto porque hay menos configuración para configurar.

Tal vez una desventaja es que si la ubicación de los cambios del repositorio en el futuro, servidores proxy necesita ser instalado o parche libera del viejo software necesario liberar la especificación de las nuevas ubicaciones de repositorio (o .m2/settings.xml siempre puede proporcionar repositorios adicionales como último recurso). Sin embargo, esto parece ser una ramificación necesaria de una buena reproducibilidad y portabilidad en la gestión de liberación en lugar de una estafa.

¿Alguna otra idea?

+2

Si la ubicación del repositorio cambia, simplemente actualice el pom y asegúrese de que todos actualicen su copia local. –

+0

Correcto, pero las versiones anteriores probablemente se hayan publicado como una distribución (p. Ej .: zip, tar.gz). Un buen beneficio de la reproducibilidad es que puede tomar cualquier distribución/versión, aplicar un parche por cualquier motivo y tiene la garantía de obtener la distribución funcional exacta más su parche y nada más. – jnorris

+0

Mi opinión exactamente refleja @jnorris, pero Sonatype ofrece algunos puntos a considerar (¿quizás desactualizados?) Sobre cómo mantener las URL fuera de los archivos POM distribuidos: http://blog.sonatype.com/2009/02/why-putting-repositories-in -your-poms-is-a-bad-idea/ – chrisinmtown

Respuesta

44

¿Dónde está el mejor lugar para especificar los repositorios necesarios para maven projects, pom.xml o settings.xml? ¿Cuáles son los pros y los contras de cada ubicación? ¿Cuál es la mejor práctica?

Personalmente definiré los repositorios requeridos por un proyecto particular en el proyecto pom.xml porque mantiene la compilación portátil. El archivo settings.xml se debe utilizar para cosas específicas o secretas del usuario solo en mi opinión. No, en realidad, pedirle al usuario que agregue ubicaciones de repositorios, incluso si está debidamente documentado, de alguna manera vence una de las características de maven (manejo transparente de la dependencia) y no me gusta esta idea.

El único caso de uso "bueno" que se me ocurre al usar settings.xml para tratar con repositorios es cuando tienes un repositorio corporativo y quieres que Maven use este repositorio en lugar de los públicos. Por ejemplo, para evitar conexiones a cualquier repositorio público, sería declarar el diccionario de la empresa como un espejo de todas ellas:

<settings> 
    ... 
    <mirrors> 
    <mirror> 
     <id>proxy-of-entire-earth</id> 
     <mirrorOf>*</mirrorOf> 
     <name>Maven Repository Manager running on repo.mycompany.com</name> 
     <url>http://repo.mycompany.com/proxy</url> 
    </mirror> 
    </mirrors> 
    ... 
</settings> 
+0

+1. Esto aclaró el "qué pasaría si" en el que estaba pensando cuando luché con esta pregunta yo mismo. 1) ¿Qué pasa si el espejo "se va" y necesita proporcionar uno nuevo (si el proyecto no se mantiene y desea mantener el árbol de fuentes original)? Configure un mirror en settings.xml 2) ¿Qué sucede si quiere usar un repot local privado solo en ciertos entornos? Use un espejo comodín en settings.xml como lo sugirió. –

+0

FWIW, esta información ahora también está en los documentos de Maven http://maven.apache.org/guides/mini/guide-mirror-settings.html#Using_A_Single_Repository –

15

Recomiendo leer el blog this artículo sobre el tema.

+2

[Cita siempre la parte más relevante de un enlace importante, en caso el sitio de destino no está disponible o está permanentemente fuera de línea.] (http://stackoverflow.com/help/how-to-answer) – Poke

2

Siempre pongo las URL en el POM y las contraseñas en settings.xml. Si coloca las URL en settings.xml, necesita que los usuarios actualicen los archivos en sus sistemas locales si alguna vez su URL cambia. Si la URL se especifica en su POM, puede cambiarla e insertar una nueva versión. Las URL cambian con más frecuencia de lo que la mayoría puede predecir y llevar a los usuarios frustrados cuando se rompe la compilación.

Las contraseñas se guardan en settings.xml por razones obvias. Las contraseñas nunca deben mantenerse en control de versión. Necesitarás contraseñas para que mvn deploy la funcionalidad para implementar en repositorios remotos.

+0

Para ver un ejemplo de cómo debe configurarse ~/.m2/settings.xml, consulte http : //stackoverflow.com/questions/2941605/sample-settings-xml-for-maven – akauppi

Cuestiones relacionadas