2012-01-05 14 views
14

Refactoreé toda la configuración del repositorio de mis diversos proyectos en un pom padre que he creado para el propósito específico de tener un único punto de configuración para cosas como repositorios y administración de distribución. Se supone que esto es una buena práctica, tal como lo entiendo. Inplegué mi pom padre en el servidor nexus y luego intenté ejecutar mis proyectos secundarios. No pueden encontrar mi padre pom. . . este tipo de sentido tiene sentido para mí ya que, sin el padre padre, no conocen el repositorio del nexo. . . parece una especie de huevo y pollo? ¿Me estoy perdiendo algo obvio?¿Cómo mi pom encuentra mi pom padre si los repositorios están configurados en el pom padre?

Respuesta

7

Es cierto que su proyecto necesita saber dónde encontrar los repositorios para descargar sus dependencias. Pero antes de ir a los repositorios externos, Maven revisará su repositorio local para ver si los artefactos que necesita están ahí. ¿Su repositorio local contiene el pom padre? Si no, puede agregarlo mediante la ejecución de

mvn install 

en el pom padres. El problema puede haber sido causado al desplegar el pom principal directamente a Nexus, sin pasar por el local. Esto se puede evitar en el futuro mediante la implementación usando

mvn deploy 

Esta será la primera instalación del artefacto a nivel local, y luego desplegarla en el repositorio externo (Nexus, en su caso). Más detalles aquí: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Si se encuentra en una situación en la que su padre pom es creado y desplegado por otros, esto no ayudará. Puede especificar los repositorios en el pom de su proyecto o en su configuración local.xml. Un enfoque común es esperar que todos los desarrolladores incluyan una definición de repositorio en su settings.xml local que apunta a su repositorio Nexus, usándolo como un espejo para todos los demás repositorios. A continuación, puede configurar cada repositorio externo que necesite en Nexus y dejar que recupere las dependencias que necesita para usted. No estoy familiarizado con Nexus, pero más detalles sobre la creación de reflejos se pueden encontrar aquí: http://maven.apache.org/guides/mini/guide-mirror-settings.html

+0

Gracias, esto ayuda. Tenía la esperanza de encontrar una solución que significara que un desarrollador simplemente podría verificar el proyecto, y construir y todo funcionaría. Este "diseño imperfecto" hace que el archivo settings.xml sea un poco molesto, pero no está mal;) El problema es que el padre pom, en la estructura scm, reside por encima de muchos proyectos. Un desarrollador en un proyecto específico, no quiere pagar a la altura del padre principal. . . tal vez algún truco de scm esté en orden. – chad

+0

Claro, yo mismo he encontrado ese problema. Es posible poner el padre pom en otro lugar, en lugar de en la parte superior del árbol svn, y definir los submódulos en otro pom que está en la parte superior. La relación padre-hijo tiene dos aspectos en Maven; la definición de un elemento primario permite la herencia de la configuración y la definición de módulos permite agregar construcciones. Sin embargo, los dos no tienen que ir juntos: puedes poner el proyecto padre en otra parte, y usar un nuevo pom en la parte superior de tu árbol svn, para que el padre pueda ser retirado y construido por sí mismo. – Conan

4

se deben actualizar los repositorios definiciones para cada uno (módulo experto) del niño, este es el principal mejores prácticas en un proceso de compilación: "Hacer la construir portátil ".

Cualquier desarrollador/sistema debería poder construir cualquier módulo sin dependencias de origen con el padre u otros módulos, solo con la referencia del repositorio.

Cuestiones relacionadas