2012-06-05 8 views
5

Sto scrivendo un'applicazione che richiede il download di un jar in base al gruppo di strumenti/idtifactid/versione.Come scaricare un jar usando Maven in modo programmatico

Attualmente iniziare 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(); 
    } 
} 

Quindi, dato l'URL del POM, ora ho l'oggetto Maven modello che lo rappresenta. Questo sembra funzionare bene.

Quello che vorrei fare sapere è due cose:

  1. trovare l'URL del manufatto vaso che il modello rappresenta nel repository Maven che il plugin Maven userebbe
  2. dato il modello, trovare il file che rappresenta il vaso nel repository locale

ho già soluzioni di scarsa qualità: vado a mvnrepository.com manualmente codifica l'url, e io uso ~/.m2/repository come prefisso per il file. Posso ovviamente migliorare questa soluzione, ma finirò per duplicare malamente il codice che è ben testato e ben utilizzato nella base di codice Maven.

Mi piacerebbe davvero sapere come farlo usando le lezioni di maven.

Ho fatto un bel po 'di ricerca su google, ma la cosa divertente di cercare qualsiasi cosa su maven e jars (anche su stackoverflow) è che trovo molte soluzioni su come usare Maven, piuttosto che su come codificare usando le classi di esperti.

Grazie per l'aiuto

+0

Maven download in ogni vaso file che sono specificati nel suo pom.xml. –

+0

dai anche un'occhiata a [jcabi-aether] (http://www.jcabi.com/jcabi-aether/), che può aiutare a farlo più facilmente e in meno linea di codice – yegor256

risposta

2

Per scaricare gli artefatti da un repository Maven si prevede di utilizzare Aether lib.

Vedi anche http://www.sonatype.com/people/category/aether/

Inoltre ci sono examples come fare le cose e il codice sorgente completo di Aether lib. Più tempo fa fa i had played a little bit in giro con etere.

+0

Bene, ho passato alcune infelici poche ore giocando con l'etere. C'è un tutorial o un blog ovunque? Le demo non vengono compilate, le classi che chiamano non sembrano esistere. Continuerò ancora qualche ora prima di sbattere la testa sulla scrivania :) –

+0

Sì dai uno sguardo all'interno: https://github.com/sonatype/sonatype-aether/tree/master/aether-demo – khmarbaise

+0

Ecco un alcune spiegazioni su come usare il codice, con un link ad un plugin di esempio che fa questo: http://www.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/ – Noremac

5

Opzione 1

Etere come raccomandato da khmarbaise.

E 'la libreria nativa che viene fornito con Maven 3.0

Opzione 2

Se si desidera una soluzione semplice per scaricare i moduli Maven dalla riga di comando o all'interno di uno script di shell, Apache edera ha un barattolo standalone.

Esempio:

using IVY dependencies manager programmatically

Opzione 3

Se siete solo in cerca di un vaso Maven e non si preoccupano di gestione delle dipendenze è ancora più semplice.

Ecco come recuperare il vaso log4j diretta da Maven centrale:

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

Se si utilizza un repository manager Nexus ha un REST utile API

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

+0

Devo dire che l'approccio dell'edera ha funzionato molto bene. Compilato e gestito http://developers-blog.org/blog/default/2010/11/08/Embed-Ivy-How-to-use-Ivy-with-Java era eccellente. Grazie andrò con questo –

+0

Non dimenticare di contrassegnarlo come la risposta se questa è stata la tua soluzione – Noremac