Maven 2 assembly with dependencies: jar under scope “system” non incluso

Sto usando il plugin maven-assembly per creare un jar della mia applicazione, incluse le sue dipendenze come segue:

 macosx  tar.gz dir     *:jar  lib    

(Ho omesso alcune altre cose che non sono correlate alla domanda)

Finora questo ha funzionato bene perché crea una directory lib con tutte le dipendenze. Tuttavia, di recente ho aggiunto una nuova dipendenza il cui ambito è system , e non la copia nella directory di output lib . devo mancare qualcosa di semplice qui, quindi chiedo aiuto.

La dipendenza che ho appena aggiunto è:

  sourceforge.jchart2d jchart2d 3.1.0 system ${project.basedir}/external/jchart2d-3.1.0.jar  

L’unico modo in cui ero in grado di includere questa dipendenza era aggiungendo quanto segue all’elemento assembly:

   external/jchart2d-3.1.0.jar lib   

Tuttavia, questo mi costringe a cambiare il pom e il file di assemblaggio ogni volta che questo barattolo viene ribattezzato, se mai. Inoltre, sembra solo sbagliato.

Ho provato con runtime in dependencySets e sourceforge.jchart2d:jchart2d senza fortuna.

Quindi, come includere un jar con scope di system nel file assembly in Maven 2?

molte grazie

Non mi sorprende che le dipendenze dell’ambito di sistema non vengano aggiunte (dopotutto, le dipendenze con un ambito di sistema devono essere esplicitamente fornite per definizione). In realtà, se davvero non vuoi mettere questa dipendenza nel tuo repository locale (ad esempio perché vuoi distribuirlo come parte del tuo progetto), questo è quello che farei:

  • Metterei la dipendenza in un “repository del file system” locale per il progetto.
  • Vorrei dichiarare quel repository nel mio pom.xml questo modo:

       my file://${basedir}/my-repo   
  • Vorrei solo dichiarare l’artefatto senza l’ambito del system , questa è solo una fonte di problemi:

      sourceforge.jchart2d jchart2d 3.1.0  

Non sono sicuro al 100% che soddisfi le tue esigenze, ma penso che sia una soluzione migliore rispetto all’utilizzo del sistema.

Aggiornamento: avrei dovuto menzionarlo nella mia risposta originale e lo sto aggiustando ora. Per installare una libreria di terze parti nel repository basato su file, utilizzare install:install-file con il parametro localRepositoryPath :

 mvn install:install-file -Dfile= \ -DgroupId= \ -DartifactId= \ -Dversion= \ -Dpackaging= \ -DlocalRepositoryPath= 

Puoi incollarlo come in una shell * nix. Su Windows, rimuovere ” \ ” e mettere tutto su una singola riga.

A proposito, puoi automatizzarlo e renderlo parte della tua creazione di esperti. Quanto segue installerà il tuo jar nel tuo repository locale prima della compilazione:

   org.apache.maven.plugins maven-install-plugin   hack-binary validate  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     

Trovo una soluzione facile nel caso tu crei un barattolo

  org.apache.maven.plugins maven-war-plugin 2.1.1    dependencies/mydep WEB-INF/lib true  **/*.jar      

È inoltre ansible gestirlo aggiungendo un set di dipendenze supplementare nei propri set di dipendenze.

  system  *:jar  lib  

La cosa migliore sarebbe utilizzare un Repository Manager (come Nexus, Artifactory, Archiva) e installare questo tipo di dipendenza in un particolare repository. Dopodiché puoi usare cose come una semplice dipendenza. Questo ti semplificherà la vita.

Documenti: https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

Una soluzione semplice per questo è aggiungerla al repository di Maven locale

Un modo per farlo è tramite i comandi di installazione di mvn come suggerito nel post precedente.

Un altro modo semplice è, 1) Nella tua eclipse ide, fai clic destro sul progetto seleziona l’opzione Maven. 2) Selezionare Installa o distribuisci un artefatto in un’opzione di repository Maven e fare clic su Avanti. 3) Fai clic su Sfoglia accanto alla casella di controllo del file Artifact e seleziona il tuo file jar 4) Inserisci GroupId e ArtifactId e la versione garantisce generare pom e creare checksum sono controllati e l’imballaggio è jar

Clicca sul traguardo, Wallah !!! il tuo lavoro è fatto, il jar viene aggiunto nel tuo repository locale che puoi definire nella directory setting.xml o m2

Ora basta aggiungere la semplice dipendenza Maven secondo la GroupId, ArtifactId e la versione jar che hai inserito come per l’importazione e questo è il tuo jar esterno sarà confezionato da Maven.

Modificato: Mi dispiace di non aver capito che alx ha anche menzionato la soluzione per il ciclo di vita pulito.

  org.apache.maven.plugins maven-install-plugin   hack-binary clean  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     

Basandosi sulla soluzione fornita da alx, è ansible eseguire il passaggio del file di installazione in fase di pulizia. ma poiché la fase pulita non è nel ciclo di vita predefinito, è necessario eseguire mvn clean per la prima volta per assicurarsi che il jar sia pronto nel repository locale.

es: mvn clean; pacchetto mvn

ha funzionato in modo più semplice sulla mia soluzione:

rimuovi dalla tua dipendenza:

  tiago.medici eureka 0.0.1  

Quindi aggiungi anche il plugin di installazione di maven nel pom.xml.

  org.apache.maven.plugins maven-install-plugin   install-external clean  ${basedir}/external/tiago.medici-0.0.1.jar default tiago.medici eureka 0.0.1 jar true   install-file