2012-12-13 16 views
14

posso distribuire un jar utilizzando la seguente nel mio pom.xml e funzionante mvn deploy:Maven distribuire vaso con le dipendenze di pronti contro termine

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://${host}:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <name>Internal Snapshots</name> 
     <url>http://${host}:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

E posso costruire un eseguibile jar-with-dependencies usando la seguente:

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>create-executable-jar</id> 
        <phase>deploy</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <archive> 
          <manifest> 
           <mainClass>my.company.app.Main</mainClass> 
          </manifest> 
         </archive> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Problema è che non so come collegarli insieme per distribuire l'eseguibile jar al mio repository Maven. Non so davvero se questo è realizzato da un nuovo plugin o aggiungendo un obiettivo o un altro passaggio al plug-in di assemblaggio esistente.

+1

Interessante ... quindi vuoi un singolo jar che includa tutte le sue dipendenze ('jar-with-dipendencies') in nexus? Presumo che quando si distribuisce questo in un ambiente di produzione, questo jar sarà autonomo (dato che ha tutte le sue dipendenze incorporate all'interno)? –

risposta

0

Essenzialmente la mia difficoltà nel fare ciò ha rivelato il fatto che il mio pom.xml era già fuori dai binari. Tutto sarebbe scattato a posto da solo. Stavo già facendo:

  • salvare tutte le dipendenze in una cartella lib
  • Costruire un vaso con un percorso di classe slurping up che plug-cartella lib
  • Utilizzare l'assemblea a fare un altro vaso schierabili

Penso che ci fossero diverse ragioni per cui questo senso avesse senso lungo il percorso, specialmente quando le mie librerie non erano ben tenute in considerazione dalle mie applicazioni.

Tuttavia eliminando 1 e 2 tutto ciò che è necessario è la sezione distributionManagement e la fase di distribuzione funziona in modo automatico. Quindi, tutto sommato, è un caso straordinario di aggiungere letteralmente funzionalità eliminando ampie porzioni di codice.

+3

Ho avuto lo stesso sintomo del * jar-con -dependencies.jar non viene spinto con una distribuzione. Il mio problema era una configurazione errata del plugin: dovevo legare alla fase del pacchetto come descritto nella documentazione (http://maven.apache.org/plugins/maven-assembly-plugin/usage.html) – ahains

+0

@ahains grazie ! questa è una soluzione migliore. per favore, fai una risposta da questo in modo che io possa davvero sorpassarti :) – Karussell

3

Quanto segue funzionava. Lascerò questa domanda un po 'aperta perché non sono sicuro che questa sia la pratica migliore, ma lavorare è qualcosa.

I problemi che ho notato sono che ho inventato il nome dell'ID e non so se questa è una pratica abituale e che devo codificare il nome del barattolo; non è dedotto da nient'altro.

<plugin> 
<artifactId>maven-deploy-plugin</artifactId> 
<version>2.7</version> 
<executions> 
    <execution> 
     <id>deploy-executable</id> 
     <goals> 
      <goal>deploy-file</goal> 
     </goals> 
     <configuration> 
      <file>target/Monitoring-Client-1.0-SNAPSHOT-jar-with-dependencies.jar</file> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 
+0

Sembra buono, ma sfortunatamente non funziona per me: Impossibile eseguire l'obiettivo org.apache.maven.plugins: maven-deploy-plugin: 2.8.2: deploy-file (default-cli) sul progetto BackofficeSmokeTest: il file dei parametri ',' url 'per l'obiettivo org.apache.maven.plugins: maven-deploy-plugin: 2.8.2: deploy-file mancante o non valido -> [Guida 1] –

4

Al fine di costruire un (cosiddetto) Über JAR e distribuirlo usando Maven, si potrebbe anche utilizzare il shade plugin. Il seguente codice è preso dal loro sito web ma ho realizzato uno o due progetti usando questa funzione.

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.0</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <shadedArtifactAttached>true</shadedArtifactAttached> 
       <shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense --> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

In questa configurazione si ottiene l'Über JAR come una distribuzione oltre al normale JAR. L'utente del tuo JAR può quindi decidere di estrarre il pacchetto all-in-one o il JAR con dipendenze basate sul classificatore.

Generalmente utilizzo il plug-in dello schermo per creare Über JAR (o modificare il JAR in un modo) e utilizzare il plug-in di assembly per creare elementi come i pacchetti di installazione (contenenti il ​​JAR e probabilmente altre cose). Non sono sicuro di quali siano gli obiettivi previsti dei singoli plugin.

0

Per prima cosa non si dovrebbe fare la creazione del vaso ueber nella fase di distribuzione, è meglio farlo nella fase del pacchetto. Inoltre, il file jar creato viene in genere collegato automaticamente al tuo artefatto e verrà trasferito nel repository remoto (nel tuo caso Nexus). È possibile controllare questo se si tenta semplicemente di eseguire un'installazione di mvn e dare un'occhiata all'output se il jar creato è installato nel repository locale. Per distribuire i risultati in nexus è necessario chiamare mvn deploy.

3

Se si associa il gruppo alla fase di confezionamento, verrà installato nel vostro repository sia il vaso "regolare" e il vaso con le dipendenze quando si esegue una build:

<plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
      <archive> 
       <manifest> 
        <mainClass>my.company.app.Main</mainClass> 
       </manifest> 
      </archive> 
      <descriptorRefs> 
       <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     <executions> 
      <execution> 
       <id>make-assembly</id> <!-- this is used for inheritance merges --> 
       <phase>package</phase> <!-- bind to the packaging phase --> 
       <goals> 
        <goal>single</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 

thenn sufficiente eseguire mvn clean install deploy a carica entrambi i vasi sul tuo repository

Problemi correlati