El POM para no es válido, las dependencias transitivas (si las hay) no estarán disponibles

7 minutos de lectura

Avatar de usuario de AreusAstarte
Areus Astarte

Esta pregunta está desactualizada y ya no es relevante. Desde entonces, me mudé a Gradle para la compilación de mi proyecto y ya no puedo verificar si las respuestas funcionan o no.

Me he encontrado con algunos problemas con Maven. Permítanme describir primero la configuración de mi proyecto:

Framework
|  -- Apache Commons Math 3.0
|  -- Bouncy Castle 1.5
|  -- etc.. (lots more)
|________
|        Client
|        | -- GUI libraries
|        | -- etc.
|
|________
         Server
         | -- Server Libraries
         | -- etc.

Entonces, esencialmente, tengo un marco que contiene la mayoría de las dependencias y luego dos proyectos, “Servidor” y “Cliente” que contienen su propio PERO también el marco como una dependencia (siendo un módulo de Framework). Instalé el proyecto Framework en mi repositorio local y mis dos proyectos pueden ver el código nativo de Framework (también conocido como mi propia lógica). SIN EMBARGO, parece que no pueden usar ninguna de las dependencias del Framework Project. Cuando intento construir cualquiera de los proyectos “secundarios”, obtengo esto:

Invalid POM for de.r2soft.empires.framework:Framework:jar:Alpha-1.2, 
transitive dependencies (if any) will not be available, 
enable debug logging for more details 

Traté de encontrar la razón detrás de esto (o mejor aún, una solución), pero no encontré nada que solucionara mis problemas. Espero que alguien aquí pueda ayudar. Mi versión maven parece ser 3.2.1 (eso es lo que me dice la versión de todos modos)

Aquí están mi framework-pom.xml y el cliente-pom.xml en pastebin:

Estructura: http://pastebin.com/cceZECaT

Cliente: http://pastebin.com/1Cuxve5F

Se agradece la ayuda.

  • Hasta donde recuerdo POM no válido para de.r2soft.empires.framework:Framework:jar:Alpha-1.2, las dependencias transitivas (si las hay) no estarán disponibles, habilite el registro de depuración para obtener más detalles es un mensaje de ADVERTENCIA, así que intente seguir lo que se sugiere y ejecute la fase maven en modo de depuración para obtener información relevante. Esto se puede hacer con -X opción.

    – tmarwen

    10 mayo 2014 a las 14:00


  • Bueno… lo ejecuté con –debug activado, sí. Escribió la salida en un archivo de texto. Compruébalo en Pastebin aquí: pastebin.com/GZdMfWnj Por lo que puedo decir, ¿está molesto por el frasco que agregué manualmente? Pero si no es así… ¿cómo se supone que debo agregarlo? :/ (Para que mis colegas también puedan usarlo y no tener que ir a la consola e instalar 100 cosas)?

    – Areus Astarté

    10 mayo 2014 a las 14:22

  • @AreusAstarte, ¿encontró una solución para esto? Estoy enfrentando el mismo problema. Tengo una dependencia definida como alcance del sistema.

    – Raúl

    1 de agosto de 2014 a las 9:16

Una razón para esto es cuando confía en un proyecto para el cual el pom principal está desactualizado. Esto sucede a menudo si está actualizando el pom principal sin instalarlo/implementarlo.

Para ver si este es el caso, simplemente ejecute con mvn dependency:tree -X y busque el error exacto. Mencionará que pierde cosas que sabe que están en el pom principal, no en el artefacto del que depende (por ejemplo, una versión jar).

La solución es bastante simple: instale el pom principal usando mvn install -N y vuelve a intentarlo

  • ¡Muchas gracias por esto, me estaba tirando de los pelos tratando de hacer que esto funcionara y esto lo resolvió!

    – CCSab

    28 de julio de 2017 a las 2:38

  • Es cierto, el mío es el mismo, incluso construí el módulo individualmente y por orden, el pom principal debe construirse primero.

    – MewX

    11 de abril de 2018 a las 3:37

  • ¿Qué hace el interruptor -N?

    –Meena Chaudhary

    3 de abril de 2019 a las 9:33

  • -N construirá un proyecto SIN construir sus submódulos. Entonces, en el caso de “mvn install -N”, instalará el pom principal sin intentar construir sus hijos también (evitando así una dependencia circular)

    – Omri Spector

    5 de abril de 2019 a las 6:49

  • SOLUCIÓN (Para mí): mvn dependency:tree -X la salida incluía ADVERTENCIAS como la pregunta original, pero también FATALs como: [FATAL] Non-readable POM /Users/me/.m2/repository/org/eclipse/jetty/toolchain/jetty-toolchain/1.7/jetty-toolchain-1.7.pom: input contained no data @ <full-path-to-same-pom-file>. Asique rm -rf ~/.m2/repository/org/eclipse/jetty entonces mvn clean compile … que volvió a descargar los archivos necesarios, y ha estado bien desde entonces.

    – DouglasDD

    21 de marzo a las 13:19

Tuve un error similar, en mi caso, eliminar todos los artefactos relacionados del repositorio local fue la solución…

  • problema similar. Tuve que borrar mi .m2/repository para que funcionara.

    – Mukul Goel

    15 de junio de 2017 a las 9:47

  • ¡Agradecer! Tuve un error similar y la eliminación de los artefactos relacionados en mi .m2/repositorio resolvió el problema…

    – estroboscópico

    22 de junio de 2018 a las 0:23


Elimine la carpeta del repositorio dentro de .m2 y ejecute mvn clean install.

Mantennos informados del resultado y Suerte

  • Esto lo hizo por mí. A veces, aparentemente, habrá archivos dañados cuando se descarguen en el repositorio local .m2

    – DPM

    26 de septiembre de 2017 a las 9:50

  • Esto no resolvió el problema para mí. Tuve que restaurar mi carpeta .m2.

    – Rocologo

    1 de abril de 2018 a las 14:21

Avatar de usuario de Olivier D
olivier d

Tengo el mismo tipo de problema y puedo tener la respuesta. tengo un proyecto de primer nivel MyProject y Module1 y Module2.
Module2 depende de Module1 y la entrada aparece como una dependencia (predeterminada). Mi proyecto

<modules>
Module1
Module2
</modules>

mvn dependency:tree de la carpeta de MyProject está bien: el módulo 2 depende del módulo 1

MyProject
---
com.acme:Module1:version
---
com.acme:Module2:version
+com.acme:Module1:version

El problema es si corro mvn dependency:tree dentro de Module2 carpeta. Entonces recibo el mensaje de error:

The POM for com.acme:Module2:version is invalid, 
transitive dependencies (if any) will not be available

Después de algunas investigaciones he descubierto que el pompón archivo creado/copiado por la parte de instalación de la compilación como m2/com/acme/myproject/Module1/version/Module1-version.pom es el original pompón archivo. Este usa variables para versiones como (duplicadas en muchos otros módulos que no se enumeran aquí) o una ruta del sistema (no hay opción de tener una dependencia del sistema). Estas variables se definen en el archivo POM principal. Si reemplazo todos los ${} en el modulo pompón archivo por sus valores, entonces todo está bien. Básicamente, cuando se construye todo, los valores de las variables están disponibles para todos los módulos dependientes, ya que este es el mismo proceso. Cuando crea un módulo individual, las variables definidas en el POM principal no están disponibles.

Su propio archivo pom del marco contiene una variable para la ruta del sistema de net.sf.javaml. Codifique la variable o encuentre otra solución como una lista de materiales.
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

Suponiendo que los poms de los proyectos de cliente y servidor no son válidos debido a una expansión insatisfecha, entonces lo siguiente debería funcionar… Si los proyectos “cliente” y “servidor” tienen su dependencia en “Framework” definido en una etiqueta, entonces primero puede instalar “Marco” usando la opción -N. Primero, cd al directorio de Framework, luego:
mvn -N clean install
La opción -N le dice a maven que solo instale el root pom en el repositorio local y que omita los módulos secundarios. Ahora cd a su proyecto secundario y vuelva a ejecutar su comando de instalación en su módulo de cliente o servidor. La compilación del cliente o del servidor ahora debería encontrar el pom principal con las propiedades que necesita en el repositorio local.

Puede obtener el mismo efecto haciendo una referencia de ruta de archivo explícita usando la etiqueta relativePath en la etiqueta principal de su hijo pom:

<parent>
  <relativePath>../my-parent</relativePath>
</parent>

Avatar de usuario de Gijs Overvliet
Gijs Overvliet

La la Estructura artefacto disponible en su repositorio local antes de ejecutar un install sobre el cliente proyecto porque no hay acoplamiento entre los dos proyectos (el cliente artefacto no es un module de tu Estructura proyecto).

Entonces, para resolver el problema, debe ejecutar mvn install en tu Estructura proyecto para que el jar empaquetado se copie en su repositorio local. Entonces depende de maven descubrirlo y encontrarlo cuando ejecuta alguna fase de maven en el cliente proyecto.

Para que sus artefactos se compartan entre su organización, debe implementar sus artefactos (cargar) en un espejo de alojamiento de nexo.

Tuve el mismo problema. Estoy administrando todos los módulos a los que se hace referencia en el proyecto que estaba tratando de construir. Y el problema resultó que tenía que hacer “implementar mvn” en todos los proyectos principales del módulo que mostraba este error cuando se usaba en otros módulos pom.xml. aqui esta toda la explicacion http://programtalk.com/java/i-used-to-get-this-maven-error-all-time/

¿Ha sido útil esta solución?