2012-04-05 15 views
9

Soy nuevo en Maven y tengo problemas para agregar dependencias. Estoy tratando de convertir un proyecto existente a Maven, y después de la adición de las dependencias de todos los frascos en mis bibliotecas de referencia, que estoy recibiendo un mensaje de error sobre los artefactos que faltan:Encontrar artefactos de Maven perdidos

Missing artifact stax:stax:jar:1.0  
Missing artifact clover:clover:jar:1.3-rc4 
Missing artifact log4j:log4j:bundle:1.2.16 
Missing artifact stax:stax-ri:jar:1.0 

De la lectura de este post: How to handle Maven missing artifact errors? , parece que necesito descargar manualmente estos archivos jar y agregarlos a mi repositorio Maven local. Mi pregunta es ¿cómo puedo encontrar estos frascos? Intenté buscar en Google, y puedo encontrar jarrones que tienen nombres similares, pero no exactamente como estos, así que no estoy seguro de si son los frascos adecuados.

¿Algún consejo para resolver este problema? El log4j jar es el único que aparece explícitamente en las bibliotecas a las que se hace referencia en mi proyecto original, así que supongo que los demás son obligatorios para otros archivos que tengo, y no sé dónde encontrarlos o cuáles son sus nombres exactos. debiera ser.

Gracias!

+0

Si usa maven y tiene que descargar artefactos manualmente, está cometiendo un error grave. Publique su pom.xml o las partes relevantes de este. – j13r

+0

Eso es lo que estaba pensando también ... El POM creado por el plugin Eclipse m2e tenía varios problemas, vea mi respuesta a continuación para la descripción de los problemas. – matthewb

Respuesta

21

Gracias a todos por responder. La causa real del problema es que, por cada uno de esos 3 artefactos faltantes, por alguna razón, cuando Maven los descargó en mi repositorio local, se agregó .lastUpdated al final del contenedor. Por ejemplo, stax-1.0.jar.lastUpdated. Esta es la razón por la cual Maven no pudo encontrar stax-1.0.jar.

Por lo tanto, para solucionar este problema, tuve que descargar stax-1.0.jar manualmente, luego instalarlo en el repositorio maven local en el mismo lugar que el archivo dañado, para que Maven pudiera encontrarlo. (Por ejemplo, con el comando:

mvn install:install-file -Dfile=<path-to-file>/stax-1.0.jar   
-DgroupId=stax -DartifactId=stax -Dversion=1.0 -Dpackaging=jar 

Utilizando el mismo groupId exacta y artifactId que el archivo existente, incorrecto fue crucial para que Maven para encontrar que

+1

gracias por compartir su solución. Agregaré esto a mi repositorio cerebral local para cuando me pase. lol. Además, existe la opción de eliminar los directorios del repositorio y tener otro intento y volver a obtener los archivos. ¡Esto funcionó para mí en el pasado! –

+0

@MikeMcMahon usted dice que un fail-safe sería encontrar el directorio repo '.m2' y eliminarlo, a modo de * force * Maven para volver a encontrar/volver a descargar libs? – mmcrae

+0

@mmcrae sí - por lo general se encuentra en 'C: \ users \ \ .m2 \ repository' o' documents and settings' para sistemas basados ​​en Windows antiguos (nix debe ser '/ home//.m2 /'). Desde allí, es posible eliminar la carpeta del repositorio y permitir a Maven volver a descargar todas sus dependencias del mayor repositorio maven. Históricamente, pero ciertamente no tan común, las dependencias pueden ser arruinadas o dañadas. Esto permitiría a Maven volver a descargar y reconstruir el repositorio. –

1

Es más probable que su definición de POM no sea correcta para log4j. Todo lo relacionado con log4j debería estar disponible en maven.

También, si se conoce el nombre del paquete (como log4j) casi siempre se puede hacer una búsqueda rápida de Google "[nombre del paquete] POM Maven" dentro de los primeros éxitos se debe o bien obtener la maven repo que contiene un fragmento rápido sobre cómo incluirlo, o el sitio web real para el tarro incluido y las instrucciones de maven.

Por ejemplo log4j:

<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 
</dependencies> 

veces, sin embargo sólo tiene que especificar el repositorio para buscar el artículo en (si no está alojado en los mayores repositorios de Maven)

Puede especificar una nuevo repositorio como

<repositories> 
    <repository> 
     <id>Java.Net</id> 
     <url>http://download.java.net/maven/2/</url> 
    </repository> 
</repositories> 

Por último, cuando no puede encontrar el artefacto ya maven'd u p para usted (esto suele ser cierto para los frascos de propiedad y o controladores que no se puede incluir en su proyecto) que puede tener el usuario instalar manualmente el punto medio de la línea de comandos

mvn instalar: instalar archivos -DgroupId = [ group-id] = -DartifactId [artefacto-id] = -Dversion [versión] -dfile =/ruta/a/la/archivo -Dpackaging = [tipo]

a continuación, puede hacer referencia a ella en su archivo experto utilizando la información descrita anteriormente

Por ejemplo, Tengo una referencia personalizada para un vendedor de salesforce.com oject

mvn instalar: instalar archivos -DgroupId = com.salesforce -DartifactId = CSM = 22 -Dversion -dfile = \ tsclient \ H \ desarrollo \ Java \ CSM-22.jar jar -Dpackaging =

Para acceder a ella en Maven:

<dependency> 
    <groupId>com.salesforce</groupId> 
    <artifactId>wsc</artifactId> 
    <version>22</version> 
</dependency> 

Por último, se pueden encontrar los frascos (o su información de experto) en sus respectivos sitios web (Tenga en cuenta Sólo estoy basando éstas enlaces fuera de los nombres tarro, estos no pueden ser los sitios web reales, sans así el log4j que sé que es correcta)

Stax

Clover

Log4j

+0

Sí, mi POM (que se creó automáticamente mediante el complemento Eclipse m2e) era incorrecto para Log4j (y los demás artefactos problemáticos también, consulte la respuesta publicada a continuación). Para Log4j, debajo de la propiedad "tipo", decía "paquete". Cuando lo eliminé, funcionó. – matthewb

1
2

puede encontrar sitios de búsqueda de dependencia bajo maven.apache.org. Vaya a la izquierda Preguntas frecuentes sobre la entrada de Menü de navegación (oficial) y Thun al final de la página.

+1

o directamente a través de http://maven.apache.org/general.html#How_to_find_dependencies –

0

Su problema podría ser algo que ver con. MNG-4142. este error significa que Maven no descargará una nueva instantánea si localCopy se establece en true en el artefacto maven-metadata-local.xml.

Tenga en cuenta que el título de este fallo es un poco engañoso por lo que es el trabajo de leer los comentarios.

Podría pensar que usar la bandera -U con maven solucionaría este problema, pero aparentemente este no es el caso.

La solución actual parece estar buscando todas las instancias de maven-metadata-local.xml y cambiando el valor de localCopy a false.

0

He resuelto este problema cambiando la versión log4j de 1.2.15 a 1.2.16.

0

También podría ser causado por el dom4j. El mismo error ocurrió cuando uso la siguiente configuración.

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>20040902.021138</version> 
</dependency> 

Después de cambiar a lo siguiente, el error desapareció.

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>1.6.1</version> 
</dependency> 
1

se puede tratar de añadir nuevos repositorios a su pom.xml

<repositories> 
    <repository> 
    <id>java.net</id> 
    <url>http://download.java.net/maven/2/</url> 
    </repository> 
     <repository> 
     <id>jboss</id> 
     <url>http://repository.jboss.com/maven2</url> 
</repository> 
</repositories> 
1

Después de varios días de este error estúpido me molestó, me encontré con el siguiente article

El autor describe que hay un repositorio de espacio de trabajo, que puede estar desactualizado. En mi caso, ayudó a importar los complementos correctos nuevamente. El repositorio del espacio de trabajo se ha actualizado y todo está bien.

Cuestiones relacionadas