Estoy tratando de descubrir cómo organizar muchos (alrededor de 50+) proyectos maven2, para que puedan implementarse en un repositorio central de nexus. Al usar el mvn deploy
objetivo, es necesario especificar el objetivo en la etiqueta distributionManagement de esta manera:
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
Ahora, no quiero que cada pom.xml (de esos 50+) contenga este bloque una y otra vez. Mi primer pensamiento sería el settings.xml
archivo, pero parece que no es posible (por diseño) definirlo allí. Entonces, la primera pregunta sería, ¿por qué es así? Si fuera posible, podría especificarlo en settings.xml en la distribución maven2, que podría distribuirse a todos los desarrolladores.
La única solución posible que encontré fue crear un proyecto de master-pom para toda la organización, que contenga estas configuraciones, y hacer que todos los demás pom.xml dependan de este master-pom a través de la <parent>
etiqueta. Pero esto parece un poco extraño en compilaciones de varios módulos:
- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
- Project 1 module pom (with pm as parent)
- Project 2 module pom (with pm as parent)
Por lo general, leo en toda la documentación que los poms del módulo deben usar el pom principal, no uno diferente. Pero después de leer el sitio web de Maven sobre Herencia v. Agregación, está escrito que de hecho es posible.
Un problema que encontré fue con la generación del sitio maven, que parece tener problemas con esta configuración (los módulos no se vinculan correctamente si no tienen una referencia directa)
Entonces, ¿es este un enfoque válido? ¿Alguna otra solución más obvia y sencilla al problema?
Respuestas:
La mejor solución para esto es crear un proyecto de archivo pom principal simple (con empaquetado 'pom') genéricamente para todos los proyectos de su organización.
Esto se puede construir, lanzar e implementar en su nexo local para que todos tengan acceso a su artefacto.
Ahora, para todos los proyectos que desee utilizar, simplemente incluya esta sección:
Esta solución le permitirá agregar fácilmente otras cosas comunes a todos los proyectos de su empresa. Por ejemplo, si quisiera estandarizar el uso de JUnit a una versión específica, este sería el lugar perfecto para eso.
Si tiene proyectos que utilizan estructuras de varios módulos que tienen su propio padre, Maven también admite el encadenamiento de la herencia, por lo que es perfectamente aceptable hacer que el archivo pom principal de su proyecto se refiera al pom principal de su empresa y que los módulos secundarios del proyecto ni siquiera conozcan su matriz de la empresa.
Veo en la estructura de su proyecto de ejemplo que está intentando poner su proyecto principal al mismo nivel que su pom agregador. Si su proyecto necesita su propio padre, el mejor enfoque que he encontrado es incluir el padre al mismo nivel que el resto de los módulos y tener su archivo agregador pom.xml en la raíz de donde existen todos los directorios de sus módulos.
Lo que hace con esta estructura es incluir su módulo principal en el agregador y compilar todo con un
mvn install
desde el directorio raíz.Usamos esta solución exacta en mi organización y ha resistido la prueba del tiempo y funcionó bastante bien para nosotros.
fuente
No es necesario un POM padre.
Puede omitir la parte de DistributionManagement por completo en sus poms y configurarla en su servidor de compilación o en settings.xml.
Para hacerlo en el servidor de compilación, simplemente pase al
mvn
comando:Consulte https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html para obtener detalles sobre las opciones que se pueden configurar.
También es posible configurar esto en su
settings.xml
.Simplemente cree un perfil allí que esté habilitado y contenga la propiedad.
Ejemplo settings.xml:
Asegúrese de que las credenciales para "instantáneas" y "versiones" estén en la
<servers>
sección de su configuración.xmlLas propiedades altSnapshotDeploymentRepository y altReleaseDeploymentRepository se introducen con maven-deploy-plugin versión 2.8. Las versiones anteriores fallarán con el mensaje de error
Para solucionar este problema, puede aplicar una versión más reciente del complemento:
fuente