forza Maven a copiare le dipendenze in target / lib

Come posso copiare le dipendenze del runtime del mio progetto nella cartella target/lib ?

Come è adesso, dopo mvn clean install la cartella di target contiene solo il jar del mio progetto, ma nessuna delle dipendenze di runtime.

Questo funziona per me:

  ...   qa    maven-dependency-plugin   install  copy-dependencies   ${project.build.directory}/lib          

L’approccio migliore dipende da cosa vuoi fare:

  • Se si desidera raggruppare le proprie dipendenze in un file WAR o EAR, è sufficiente impostare il tipo di imballaggio del progetto su EAR o WAR. Maven raggrupperà le dipendenze nella giusta posizione.
  • Se si desidera creare un file JAR che includa il codice insieme a tutte le dipendenze, utilizzare il plug-in di assembly con il descrittore di jar-with-dependencies . Maven genererà un file JAR completo con tutte le tue classi e le classi da qualsiasi dipendenza.
  • Se vuoi semplicemente trascinare le tue dipendenze nella directory di destinazione in modo interattivo, usa il plugin di dipendenza per copiare i tuoi file.
  • Se vuoi inserire le dipendenze per qualche altro tipo di elaborazione, probabilmente avrai bisogno di generare il tuo plugin. Ci sono API per ottenere l’elenco delle dipendenze e la loro posizione su disco. Dovrai prenderlo da lì …
 mvn install dependency:copy-dependencies 

Funziona con la directory delle dipendenze creata nella cartella di destinazione. Mi piace!

Dai uno sguardo al plugin delle dipendenze di Maven , in particolare, l’ objective delle dipendenze: copy-dependencies . Dai un’occhiata all’esempio sotto l’intestazione La dipendenza: copy-dependencies mojo . Imposta la proprietà di configurazione OutputDirectory su $ {basedir} / target / lib (credo, dovrai testare).

Spero che questo ti aiuti.

Una soluzione semplice ed elegante per il caso in cui è necessario copiare le dipendenze in una directory di destinazione senza utilizzare altre fasi di Maven (l’ho trovato molto utile quando si lavora con Vaadin).

Esempio di pom completo:

  4.0.0 groupId artifactId 1.0   org.mybatis mybatis-spring 1.1.1      maven-dependency-plugin   process-sources  copy-dependencies   ${targetdirectory}        

Quindi eseguire mvn process-sources

Le dipendenze del file jar possono essere trovate in /target/dependency

Se vuoi farlo occasionalmente (e quindi non vuoi cambiare il tuo POM), prova questa riga di comando:

  dipendenza mvn: copy-dependencies -DoutputDirectory = $ {project.build.directory} / lib 

Se ometti l’ ultimo argomento , le dipendenze vengono posizionate in target/dependencies .

Prova qualcosa del genere:

  org.apache.maven.plugins maven-jar-plugin 2.4    true lib/ MainClass      org.apache.maven.plugins maven-dependency-plugin 2.4   copy install  copy-dependencies    ${project.build.directory}/lib      

Tutto ciò di cui hai bisogno è il seguente snippet all’interno della build/plugins pom.xml:

  maven-dependency-plugin   prepare-package  copy-dependencies   ${project.build.directory}/lib     

Quanto sopra verrà eseguito nella fase del package quando si esegue

 mvn clean package 

E le dipendenze verranno copiate nella directory di output specificata nello snippet, ad esempio in questo caso lib .

Se vuoi farlo solo occasionalmente, non sono necessarie modifiche a pom.xml. Basta eseguire quanto segue:

 mvn clean package dependency:copy-dependencies 

Per sovrascrivere il percorso predefinito, che è ${project.build.directory}/dependencies , aggiungere una proprietà di sistema denominata outputDirectory , cioè

  -DoutputDirectory=${project.build.directory}/lib 

ammesso che

  • non vuoi alterare il pom.xml
  • non si desidera eseguire il test scope (ad esempio junit.jar) o le dipendenze fornite (ad esempio wlfullclient.jar)

ecco cosa ha funzionato per me:

 mvn install dependency: copy-dependencies -DincludeScope = runtime -DoutputDirectory = target / lib

Se vuoi consegnare un pacchetto del tuo jar per le applicazioni, insieme a tutte le sue dipendenze e alcuni script per invocare il MainClass, guarda il plugin-maven-appassembler .

La seguente configurazione genererà script per Window e Linux per avviare l’applicazione (con un percorso generato che fa riferimento a tutti i jar di dipendenza, scarica tutte le dipendenze (in una cartella lib sotto target / appassembler) .Il plug-in di assembly può quindi essere utilizzato per impacchettare l’intero directory di appassembler a un zip che viene installato / distribuito insieme al jar al repository.

   org.codehaus.mojo appassembler-maven-plugin 1.0   generate-jsw-scripts package  generate-daemons      myApp name.seller.rich.MyMainClass  start   jsw    ${project.build.directory}/appassembler    assemble-standalone integration-test  assemble     name.seller.rich.MyMainClass  mymain    windows unix  flat lib      maven-assembly-plugin 2.2-beta-4   integration-test  single    src/main/assembly/archive.xml      

Il descrittore dell’assembly (in src / main / assembly) per il pacchetto della direcotry come zip potrebbe essere:

  archive  zip    ${project.build.directory}/appassembler /    

Se crei il tuo progetto, un esperto di guerra o di orecchio copierà le dipendenze.

Puoi utilizzare il plugin Shade per creare un jar uber in cui puoi raggruppare tutte le dipendenze di terze parti.

Giusto per spiegare cosa è già stato detto in breve. Volevo creare un file JAR eseguibile che includesse le mie dipendenze insieme al mio codice. Questo ha funzionato per me:

(1) Nel pom, sotto , ho incluso:

  maven-assembly-plugin 2.2-beta-5    dk.certifikat.oces2.some.package.MyMainClass    jar-with-dependencies    

(2) Esecuzione di assemblaggio di compilazione mvn: l’assembly ha prodotto il desiderato my-project-0.1-SNAPSHOT-jar-with-dependencies.jar nella directory di destinazione del progetto.

(3) Ho eseguito il JAR con java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar

È una soluzione pesante per incorporare dipendenze pesanti, ma il plug-in di assemblaggio di Maven fa il trucco per me.

La risposta di @ Rich Seller dovrebbe funzionare, anche se per casi più semplici è necessario solo questo estratto dalla guida all’utilizzo :

     maven-assembly-plugin 2.2.2   jar-with-dependencies       

Se hai problemi relativi alle dipendenze che non appaiono nel file WEB-INF / lib quando si esegue su un server Tomcat in Eclipse, dai un’occhiata a questo:

ClassNotFoundException DispatcherServlet all’avvio di Tomcat (dipendenze Maven non copiate in wtpwebapps)

Devi semplicemente aggiungere le dipendenze Maven in Proprietà progetto> Assemblaggio distribuzione.

  4.0.0 com.edge STORM2 0.0.1-SNAPSHOT jar STORM2 http://maven.apache.org  UTF-8       maven-assembly-plugin    com.edge.STORM2.LogAnalyserStorm    jar-with-dependencies        junit junit 3.8.1 test   org.apache.storm storm-core 1.1.1 provided    

@john Questo è il mio pom, mi manca qualcosa? il jar creato con le dipendenze, non contiene alcuna class lib o jar