Zwinge Maven dazu, Abhängigkeiten in target / lib zu kopieren

Wie bekomme ich die Laufzeitabhängigkeiten meines Projekts in den target/lib kopiert?

Wie es jetzt ist, enthält der mvn clean install nach der mvn clean install nur das Jar meines Projekts, aber keine der Laufzeitabhängigkeiten.

Solutions Collecting From Web of "Zwinge Maven dazu, Abhängigkeiten in target / lib zu kopieren"

Das funktioniert für mich:

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

Der beste Ansatz hängt davon ab, was Sie tun möchten:

  • Wenn Sie Ihre Abhängigkeiten in einer WAR- oder EAR-Datei bündeln möchten, setzen Sie einfach den Verpackungstyp Ihres Projekts auf EAR oder WAR. Maven wird die Abhängigkeiten am richtigen Ort bündeln.
  • Wenn Sie eine JAR-Datei erstellen möchten, die Ihren Code zusammen mit all Ihren Abhängigkeiten enthält, verwenden Sie das Assembly- Plugin mit dem Deskriptor jar-with-dependencies . Maven generiert eine vollständige JAR-Datei mit all Ihren classn und den classn aus beliebigen Abhängigkeiten.
  • Wenn Sie Ihre Abhängigkeiten einfach interaktiv in das Zielverzeichnis ziehen möchten, verwenden Sie das Abhängigkeits- Plugin, um Ihre Dateien zu kopieren.
  • Wenn Sie die Abhängigkeiten für eine andere Art der Verarbeitung abrufen möchten, müssen Sie wahrscheinlich ein eigenes Plugin erstellen. Es gibt APIs, um die Liste der Abhängigkeiten und ihren Speicherort auf der Festplatte abzurufen. Sie müssen es von dort nehmen …
 mvn install dependency:copy-dependencies 

functioniert für mich mit Abhängigkeiten Verzeichnis erstellt im Zielordner. Mag ich!

Werfen Sie einen Blick auf das Maven-Abhängigkeits-Plugin , genauer gesagt auf das Abhängigkeits-Ziel: copy-dependencies . Sehen Sie sich das Beispiel unter der Überschrift Die Abhängigkeit: Kopierabhängigkeiten mojo an . Setzen Sie die Konfigurationseigenschaft outputDirectory auf $ {basedir} / target / lib (ich glaube, Sie müssen testen).

Hoffe das hilft.

Eine einfache und elegante Lösung für den Fall, dass man die Abhängigkeiten in ein Zielverzeichnis kopieren muss, ohne irgendwelche anderen Phasen von maven zu verwenden (ich fand dies sehr nützlich, wenn ich mit Vaadin arbeite).

Komplettes Pom-Beispiel:

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

Führen Sie dann mvn process-sources

Die JAR-Dateiabhängigkeiten sind in /target/dependency

Wenn Sie dies gelegentlich tun möchten (und daher Ihr POM nicht ändern möchten), versuchen Sie es mit dieser Befehlszeile:

  mvn-Abhängigkeit: Kopierabhängigkeiten -DoutputDirectory = $ {project.build.directory} / lib 

Wenn Sie das letzte Argument weglassen, werden die Abhängigkeiten in target/dependencies .

Versuchen Sie etwas wie folgt:

  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      

Alles, was Sie brauchen, ist das folgende Snippet in pom.xml’s build/plugins :

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

Das obige wird in der package , wenn Sie ausführen

 mvn clean package 

Und die Abhängigkeiten werden in das outputDirectory kopiert, das im Snippet angegeben ist, in diesem Fall also lib .

Wenn Sie dies nur gelegentlich tun möchten, sind keine Änderungen an pom.xml erforderlich. Führen Sie einfach Folgendes aus:

 mvn clean package dependency:copy-dependencies 

Um den Standardspeicherort, der ${project.build.directory}/dependencies , zu überschreiben, fügen Sie eine Systemeigenschaft namens outputDirectory , d

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

angenommen

  • Sie möchten die pom.xml nicht ändern
  • Sie möchten keinen Testbereich (z. B. junit.jar) oder keine bereitgestellten Abhängigkeiten (z. B. wlfullclient.jar)

hier ist was für mich funktionierte:

 mvn install-Abhängigkeit: copy-dependencies -DincludeScope = Laufzeit -DoutputDirectory = target / lib

Wenn Sie ein Paket Ihres Application-Jar zusammen mit all seinen Abhängigkeiten und einigen Skripten zum Aufruf der MainClass bereitstellen möchten, sehen Sie sich das appassembler-maven-plugin an .

Die folgende Konfiguration erzeugt Skripte für Window und Linux, um die Anwendung zu starten (mit einem generierten Pfad, der auf alle Abhängigkeiten verweist, alle Abhängigkeiten herunterlädt (in einen lib-Ordner unter target / appassembler). Das Assembly-Plugin kann dann zum Packen des Ganzen verwendet werden appassembler-Verzeichnis zu einer Zip-Datei, die zusammen mit dem Jar zum Repository installiert / bereitgestellt wird.

   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      

Der Assembly-Deskriptor (in src / main / assembly), um das Verzeichnis als Zip zu packen, wäre:

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

Wenn Sie Ihr Projekt zu einem Krieg oder einem Ohr machen, wird maven die Abhängigkeiten kopieren.

Sie können das Schatten-Plugin verwenden , um ein Uber-JAR zu erstellen, in dem Sie alle Abhängigkeiten von Drittanbietern bündeln können.

Nur um kurz zu sagen, was bereits gesagt wurde. Ich wollte eine ausführbare JAR-Datei erstellen, die meine Abhängigkeiten zusammen mit meinem Code enthielt. Das hat für mich funktioniert:

(1) Im Pom, unter , habe ich folgendes eingefügt:

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

(2) Ausführen von mvn compile assembly: assembly hat das gewünschte my-project-0.1-SNAPSHOT-jar-with-dependencies.jar im Zielverzeichnis des Projekts erstellt.

(3) Ich habe das JAR mit java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar ausgeführt

Es ist eine schwere Lösung für das Einbetten schwerer Abhängigkeiten, aber das Assembler-Plugin von Maven macht den Trick für mich.

@ Rich Sellers Antwort sollte funktionieren, obwohl Sie für einfachere Fälle nur diesen Auszug aus dem Benutzerhandbuch benötigen:

     maven-assembly-plugin 2.2.2   jar-with-dependencies       

Wenn bei der Ausführung auf einem Tomcat-Server in Eclipse Probleme mit Abhängigkeiten auftreten, die nicht in der Datei WEB-INF / lib enthalten sind, sehen Sie sich Folgendes an:

ClassNotFoundException DispatcherServlet beim Start von Tomcat (Maven-Abhängigkeiten werden nicht in wtpwebapps kopiert)

Sie mussten einfach die Maven-Abhängigkeiten in Projekteigenschaften> Deployment-Assembly hinzufügen.

  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 Das ist mein Pom, vermisse ich etwas? das erstellte jar mit Abhängigkeiten enthält keine lib-class oder jar