2011-02-28 14 views
6

Mi manca qualcosa. Ho cercato e cercato, e giocato e armeggiato, e ancora non riesco a capire come eseguire le seguenti operazioni con Maven:Maven: scarica l'artefatto ei suoi deps in una directory specifica

Vorrei scaricare un artefatto e tutte le sue dipendenze (e dipendenze transitive), dal nostro server Nexus interno, in una posizione specificata dall'utente. L'idea qui è di permettere alla persona che sta implementando la soluzione in produzione un modo in cui possono facilmente ottenere tutti i file jar di cui hanno bisogno in un unico posto.

C'è dipendenza: get, e questo è close-but-no-cigar. Con dipendenza: get, tutti gli artefatti vengono scaricati nel repository mvn locale, sotto le directory in base al groupId e al manufatto di ciascun artefatto. Questo NON è quello che voglio, perché poi devi arrancare attorno a tutte quelle directory per arrivare ai barattoli. Voglio che tutti i file vengano scaricati in una directory in modo che si trovino in un'unica posizione.

Quindi esiste una dipendenza: dipendenze di copia. Questo di nuovo fa quasi quello che voglio; copia tutti i deps di un artefatto in target/dipendenza. I due problemi con questo sono 1) È necessario avere un pom.xml; non è possibile specificare le coordinate arbitrarie come si può con dipendenza: get e 2) dipendenza: copy-dependencies non copia il principale artefatto stesso in target/dipendenze.

Ci deve essere un modo migliore per farlo, ma non riesco a capire dove altro cercare una soluzione. Per riassumere, voglio essere in grado di fornire a qualcuno una serie di coordinate di maven (groupId: artifactId: version) e il nostro URL interno di Nexus, e fargli scaricare tutto con un comando in una directory di loro scelta.

+0

Si può creare un progetto che utilizza quelli come dipendenze, li sposta in, e crea il proprio artefatto con quei vasi? – corsiKa

+0

Suppongo di sì, ma non mi sembra giusto. Dovrebbe esserci un modo per scaricare direttamente un artefatto e le sue funzioni, no? – Steven

+0

Sono assolutamente d'accordo. Non sembra giusto. E l'ultima cosa che tutti vogliono è "qualcosa che funzioni finché non troviamo un modo migliore" perché sarai bloccato con il kludge per sempre. Ma se tutto il resto fallisce ... :) – corsiKa

risposta

0

Se "vuoi dare a qualcuno un set di coordinate di maven" sarebbe meglio metterli in uno speciale pom.xml (devi scriverli ovunque). Questo pom non è il pom del tuo "artefatto principale" ma ha il "manufatto principale" come dipendenza. Il tipo di confezione può essere pom poiché questo progetto non creerà alcun artifcat stesso.

Quindi utilizzare la soluzione dependency:copy-dependencies già valutata e otterrete tutte le dipendenze necessarie. IMHO una soluzione elegante e semplice. Non ne so niente di meglio.

1

Utilizzare il plugin assembly Maven per creare un ulteriore "jar con dipendenze" in un file ZIP che include tutto.

http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <!-- TODO: a jarjar format would be better --> 
    <id>jar-with-dependencies</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

Quindi l'utente può solo richiedere <type>zip</type>, oltre al regolare 'Maven coordinate' per ottenere un file zip con tutte le dipendenze.

+0

+1 - Ho usato io stesso il plugin di assemblaggio per confezionare il JAR del mio progetto con le sue dipendenze quando avevo bisogno di distribuire un'applicazione desktop eseguibile; tutti i JAR dipendenti dovevano essere presenti sul classpath. È molto semplice da configurare e ha un'ottima documentazione. –

Problemi correlati