2012-06-05 8 views
5

Estoy escribiendo una aplicación que requiere que descargue un jar dado el mazo groupid/artifactid/version.Cómo descargo un jar usando maven programtically

Actualmente comienzo con

public Model pomToModel(String pomUrl) throws Exception { 
URL url = new URL(pomUrl); 
    InputStream stream = url.openStream(); 
    try { 
     Model model = new MavenXpp3Reader().read(stream); 
     return model; 
    } finally { 
     stream.close(); 
    } 
} 

Así dé la URL del POM, ahora tengo el objeto experto Modelo representarla. Esto parece funcionar bien.

Lo que me gustaría hacer saber es dos cosas:

  1. buscar la URL del artefacto frasco de que el modelo representa en el repositorio de Maven que el plugin experto usaría
  2. Dado el modelo, se encuentran el fichero que representa el frasco en el repositorio local

ya tengo soluciones de baja calidad: voy a mvnrepository.com manualmente la codificación de la URL, y utilizo ~/.m2/repositorio como el prefijo para el archivo. Obviamente puedo mejorar esta solución, pero terminaré duplicando mal el código que está bien probado y bien utilizado en la base de código maven.

Realmente me gustaría saber cómo hacer esto usando las clases de maven.

He hecho una buena cantidad de búsquedas en Google, pero lo divertido de buscar cualquier cosa sobre maven y jar (incluso en stackoverflow) es que encuentro muchas soluciones sobre cómo usar maven, en lugar de cómo codificar usando las clases maven.

Gracias por la ayuda

+0

Maven descargas todo tarro archivos que están especificados en su pom.xml. –

+0

eche un vistazo a [jcabi-aether] (http://www.jcabi.com/jcabi-aether/), que puede ayudar a hacer esto más fácil y en menos línea de código – yegor256

Respuesta

2

Para descargar los artefactos de un repositorio Maven se pretende utilizar Aether lib.

Ver también http://www.sonatype.com/people/category/aether/

Además hay examples cómo hacer las cosas y el código fuente completo de Éter lib. Hace más tiempo que hace un año i had played a little mordí un poco con Aether.

+0

Bueno, he pasado unas pocas horas infelices jugando con Aether. ¿Hay algún tutorial o blog en alguna parte? Las demostraciones no se compilan, las clases que nombran no parecen existir. Voy a seguir por unas horas más antes de golpearme la cabeza en el escritorio :) –

+0

Sí, eche un vistazo en el interior: https://github.com/sonatype/sonatype-aether/tree/master/aether-demo – khmarbaise

+0

Aquí hay una alguna explicación de cómo usar el código, con un enlace a un plugin de ejemplo que hace esto: http://www.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/ – Noremac

5

Opción 1

Aether según la recomendación de khmarbaise.

Es la biblioteca nativa que se incluye con Maven 3.0

Opción 2

Si quieren una solución sencilla para la descarga de módulos Maven desde la línea de comandos o un script de shell, Apache Ivy tiene un frasco standalone.

Ejemplo:

using IVY dependencies manager programmatically

Opción 3

Si lo que buscas es un frasco de Maven y no se preocupan por la gestión de la dependencia es aún más simple.

Aquí es cómo recuperar el tarro de log4j directo desde Maven central:

curl -O http://search.maven.org/remotecontent?filepath=log4j/log4j/1.2.17/log4j-1.2.17.jar 

Si está utilizando un administrador de repositorio Nexus tiene una API REST útil

Using the Nexus rest API to get latest artifact version for given groupid/artifactId

+0

Tengo que decir que el enfoque de hiedra funcionó muy bien. Compilado y ejecutado. http://developers-blog.org/blog/default/2010/11/08/Embed-Ivy-How-to-use-Ivy-with-Java fue excelente. Gracias iré con este –

+0

No olvide marcar esto como la respuesta si esta fue su solución – Noremac

Cuestiones relacionadas