2013-07-04 24 views
5

Non capisco perché questo è così difficile:copia artefatto dal repository Maven locale

In uno script, ho bisogno di copiare un manufatto da nesso ad una certa directory. Utilizzando l'API Rex Nexus dovrei specificare il repository di cui non voglio sapere nulla. Così ho provato a ottenere l'artefatto con l'obiettivo get del plugin maven-dependence, che funziona bene. (In tal caso l'ho preso da un gruppo sul nostro nexus che include sia, versioni che istantanee.)

Tuttavia, ora ho l'artefatto nel mio repository locale e l'obiettivo "copia" dello stesso plugin non sembra essere in grado di estrarre quell'artefatto da lì. È davvero necessario scendere nella cartella .m2 e prendere quel jar con il comando unix cp? Qualcuno ha mai copiato gli artefatti dai loro repository locali in altre directory prima?

In alternativa, se qualcuno può dirmi come ottenere un artefatto tramite l'API Nexus senza specificare il repository, ciò funzionerebbe anche.

+0

Quali Maven plug hai provato utilizzando? Mi aspetto che il plugin di dipendenza funzioni per questo: http://maven.apache.org/plugins/maven-dependency-plugin/ Quando dici "Ora ho l'artefatto nel mio repository locale", intendi, in questo caso, tu * SOLO * hai l'artefatto nel tuo repository locale-- cioè, sulla stessa macchina? – Keith

+0

Ho usato org.apache.maven.plugins: maven-dependency-plugin: 2.8: ottenere l'artefatto da nexus al mio repository locale in ~/.m2 - così ora è sulla mia macchina locale (e sul nostro nesso locale , pure). –

+0

Nella seconda fase, provo a utilizzare org.apache.maven.plugins: plugin-dependency-maven: 2.8: copia per ottenere quell'artefatto da ~/.m2/** ad un'altra dir sulla mia macchina ma l'obiettivo della copia va dritto al centro e non guarda affatto al mio repository locale (non guarda al nostro nesso locale perché non è configurato nel mio settings.xml, che potrebbe essere strano a sé stante, ma lo configuriamo nel nostro company genitore: è il primo passo, posso fornire l'url del nesso locale, ecco perché funziona) –

risposta

2

Sembra che il problema fosse il file _maven.repositories in concomitanza con il particolare setup di maven nella mia azienda.

Non inseriamo le informazioni sul repository locale nel nostro settings.xml. È tutto nel genitore che tutti i nostri progetti usano. Ma se vuoi fare un po 'di magia mvn-CLI pura non hai il genitore-pom, quindi devi fornire tu stesso l'URL al repository locale. Questo è possibile con la dipendenza: ottenere l'obiettivo, ed è per questo che sono stato in grado di scaricare il mio artefatto dal nostro Nexus nel mio repository locale.

Quando si utilizza copia, tuttavia, non è possibile specificare un URL. Ma perché dovrei volerlo? Ho appena scaricato quell'artefatto nel mio repository locale, giusto?

Ecco dove entra in gioco il file _maven.repositories. Anche con l'opzione -o, maven3 consulta il file, che specifica il repository originale da cui proviene l'artefatto. (grazie ai ragazzi di this thread per aver pubblicato i loro risultati!). Se non riesce a raggiungere il repository, sosterrà che il tuo file non è lì. (Btw., Questo non è utile imho. Dovrebbe dire qualcosa sul repository originale non raggiungibile e che quindi il file non verrà copiato.)

Questo è stato il motivo per cui la copia non ha funzionato per me.

Semplicemente rinominare quel file fa il trucco.

Devo indagare su una soluzione più pulita a questo, però.

Per rendere le cose ancora più complicate, non ho potuto utilizzare la dipendenza: copia o dipendenza: copy-dependecies. Per alcuni motivi richiedono un pom, che non ho nel mio caso. Che cosa funziona è org.apache.maven.plugins: plugin-dependency-plugin: 2.8: copia che credo dovrebbe essere la stessa cosa, ma questa è un'altra storia.

Grazie per le vostre risposte!

+0

Grazie per aver postato questo! Avevo lo stesso problema; continuò ad andare al repository centrale. Dovevo definire un profilo in settings.xml ed elencare il repository maven centrale e il mio repository privato. [Multi-repos] (https://maven.apache.org/guides/mini/guide-multiple-repositories.html). Ho anche scoperto che l'utilizzo della versione 2.1 del plugin di dipendenza richiedeva un POM, ma il 2.8 no. Immagino che fosse una funzione richiesta di essere in grado di eseguirlo senza un POM e quindi 2.8 (più recente) ha la possibilità di funzionare senza un POM. – Justin

3

appena provato questo e ha funzionato per me:

mvn dependency:copy-dependencies -DincludeArtifactIds=jcharts -DincludeGroupIds=jcharts -DoutputDirectory=/tmp/ 

Questo copiato il jcharts artefatto: jcharts a/tmp/E 'stato nel mio locale (e remote) pronti contro termine quando questo è stato eseguito.

+0

ma ha bisogno di un pom per eseguire (che non ho in questo caso). può essere generato qualcosa, come un archetipo? –

+0

Non hai nemmeno bisogno di un pompino. È possibile utilizzare le librerie Java sottostanti che vengono scaricate dai repository Maven. – noahlz

+0

Voglio dire, quando eseguo questo obiettivo (con gli ID di gruppo e artefatto corretti), ottengo il messaggio "L'obiettivo richiede un progetto da eseguire ma non c'è POM in questa directory". –

1

Se si utilizza Sonatype Nexus, è necessario disattivare la funzione "Centrale" as outlined in their book.

In caso contrario, per @Keith, dependency:copy-dependency farà ciò che si sta tentando di fare. dependency:get specialmente download da repository remoti, as stated in the documentation

è possibile anche forzare Maven di non scaricare da repository l non locali eseguendolo in modalità offline: -o

Modifica

È anche possibile utilizzare Maven Wagon Plugin per copiare il file dal repository locale in una directory arbitraria. Questo non dovrebbe richiedere un pom (ma potrebbe essere necessario fornire l'URL completo al barattolo).

+0

sembra che il mio problema potrebbe essere qualcos'altro. Ho seguito il tuo consiglio e ho provato l'opzione -o, e ora maven afferma che l'artefatto non è nel mio repository locale. Dovrò indagare su questo. grazie! –

0

avevo bisogno di essere in grado di specificare l'ID gruppo, ID artefatto e la versione (e confezionamento), questo ha funzionato per me:

mvn dependency:copy \ 
    -Dartifact=org.openmrs.web:openmrs-webapp:2.2.0-SNAPSHOT:war \ 
    -DoutputDirectory=/tmp 
Problemi correlati