Pregunta

Acabo de terminar de convertir uno de nuestros proyectos marco internos de Ant a Maven. La compilación Maven funciona bien y se implementa en nuestro repositorio sin problemas.

El problema es que cuando otros proyectos intentan consumir el marco, no funciona. Lo único descargado es POM de marco de nivel superior.

He intentado agregar algunas entradas de dependencia a uno o más de los diversos módulos, pero no importa cuál agregue, obtengo un error de dependencia circular. También intenté crear un archivo POM de segundo nivel superior sin módulos y algunas dependencias para sobrescribir el del Administrador de repositorio. Esto hace que se descarguen algunas de las dependencias, pero luego la construcción de Maven colgará en lugares aleatorios. Basado en Windows Task Manager, parece que está en un bucle interminable. Por lo tanto, un segundo archivo de POM no parece ser la respuesta (o lo estoy haciendo mal).

Mi archivo POM marco se parece a esto:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>framework_snt</groupId>
  <artifactId>SFP</artifactId>
  <packaging>pom</packaging>
  <name>SFP framework</name>
  <version>6.3</version>

  <modules>
.... 50+ modules here
  </modules>

y luego las propiedades habituales, la gestión de dependencias y las entradas de gestión de complementos para una POM de nivel superior.

En el módulo de consumo solo tengo lo siguiente:

<dependency>
  <groupId>framework_snt</groupId>
  <artifactId>SFP</artifactId>
  <version>6.3</version>
  <type>pom</type>
</dependency>

Esto está en el POM de nivel superior, por lo que todos los submódulos tienen acceso a las bibliotecas de marco para facilitar los desarrolladores.

¿Cómo configuro las cosas para que todos los archivos JAR dependientes serán descargados por mis proyectos de consumo?

¿Fue útil?

Solución

Parece que su proyecto marco produce varios artefactos de jar, uno para cada módulo infantil, pero no hay artefacto de jar para el proyecto matriz. Por lo tanto, declarar una dependencia del POM del proyecto principal no es lo que desea hacer. En su lugar, debe declarar una dependencia de cada uno de los módulos infantiles de su proyecto marco.

Tengo una configuración similar en la que tengo un proyecto de "kit de herramientas" con varios módulos (cada uno produciendo un artefacto de jar). Luego, en mis otros proyectos, declaro dependencias de cualquier módulo que necesite usar. Sin embargo, no declaro una dependencia de mi archivo POM de proyectos matriz "Toolkit". En cambio, solo declaro dependencias de los artefactos de los módulos infantiles.

<dependency>
  <groupId>com.mycompany.toolkits</groupId>
  <artifactId>file-utils</artifactId>
  <version>1.0.0</version>
</dependency>

Observe que mi declaración de dependencia apunta a uno de los módulos de mis hijos y no declara <type>pom</type> Como tú lo hiciste. Si quisieras ser realmente explícito, podrías declarar <type>jar</type> en cambio.

Otros consejos

los framework Pom como lo llamas es el parent POM de su proyecto multimódulo.

Si bien los módulos pueden depender del otro, no puede depender de este POM principal. Esto es lo que posiblemente está causando la dependencia circular.

Deberá reembolsar sus módulos e identificar qué módulos dependen de qué y especificar adecuadamente las dependencias. Además, estas dependencias son típicamente jar Dependencias: un empaque que contendrá fuentes y recursos.

Maven con el ejemplo es uno de los muchos recursos disponibles que brinda más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top