Wie bekomme ich die Laufzeitabhängigkeiten meines Projekts in den target/lib
Ordner kopiert ?
Wie es jetzt ist, enthält mvn clean install
der target
Ordner nur das JAR meines Projekts, aber keine der Laufzeitabhängigkeiten.
Wie bekomme ich die Laufzeitabhängigkeiten meines Projekts in den target/lib
Ordner kopiert ?
Wie es jetzt ist, enthält mvn clean install
der target
Ordner nur das JAR meines Projekts, aber keine der Laufzeitabhängigkeiten.
Antworten:
Das funktioniert bei mir:
<project>
...
<profiles>
<profile>
<id>qa</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
excludeScope
Option hinzu ( maven.apache.org/plugins/maven-dependency-plugin/… ).
<excludeScope>test</excludeScope>
geht in den configuration
Knoten.
Der beste Ansatz hängt davon ab, was Sie tun möchten:
mvn install dependency:copy-dependencies
Funktioniert bei mir mit dem im Zielordner erstellten Abhängigkeitsverzeichnis. Mag ich!
Schauen Sie sich das Maven-Abhängigkeits-Plugin an , insbesondere das Ziel Abhängigkeit: Kopieren-Abhängigkeiten . Schauen Sie sich das Beispiel unter der Überschrift Die Abhängigkeit: Kopierabhängigkeiten mojo an . Stellen Sie die ausgabeKonfigurationsEigenschaft auf $ {basedir} / target / lib (glaube ich, werden Sie zu testen).
Hoffe das hilft.
Eine einfache und elegante Lösung für den Fall, dass die Abhängigkeiten in ein Zielverzeichnis kopiert werden müssen, ohne andere Phasen von Maven zu verwenden (ich fand dies sehr nützlich, wenn ich mit Vaadin arbeite).
Komplettes Pom-Beispiel:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${targetdirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Dann renne mvn process-sources
Die JAR-Dateiabhängigkeiten finden Sie in /target/dependency
Wenn Sie dies gelegentlich tun möchten (und daher Ihr POM nicht ändern möchten), versuchen Sie diese Befehlszeile:
MVN-Abhängigkeit: Kopierabhängigkeiten -DoutputDirectory = $ {project.build.directory} / lib
Wenn Sie das letzte Argument weglassen , werden die Abhängigkeiten eingefügt target/dependencies
.
mvn dependency:copy-dependencies -DoutputDirectory=./lib
Versuchen Sie so etwas:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy</id>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
maven clean install
, dann finden Sie lib
intarget
install
Phase durch ersetzenprocess-resources
so dass die Abhängigkeiten kopiert werden, bevor das build
Ziel läuft
Alles was Sie brauchen ist das folgende Snippet in pom.xml's build/plugins
:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Das Obige wird in der package
Phase ausgeführt, in der Sie ausgeführt werden
mvn clean package
Und die Abhängigkeiten werden in das im Snippet angegebene outputDirectory kopiert, dh lib
in diesem Fall.
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
So überschreiben Sie den Standardspeicherort: ${project.build.directory}/dependencies
, fügen Sie eine Systemeigenschaft mit dem Namen hinzu outputDirectory
, d. H.
-DoutputDirectory=${project.build.directory}/lib
angenommen
Hier ist, was für mich funktioniert hat:
mvn install dependency: copy-dependencies -DincludeScope = Laufzeit -DoutputDirectory = target / lib
Wenn Sie ein Bundle Ihrer Anwendungs-JAR mit all ihren Abhängigkeiten und einigen Skripten zum Aufrufen der MainClass bereitstellen möchten, sehen Sie sich das Appassembler-Maven-Plugin an .
Die folgende Konfiguration generiert Skripts für Windows und Linux zum Starten der Anwendung (mit einem generierten Pfad, der auf alle Abhängigkeitsgläser verweist, laden Sie alle Abhängigkeiten herunter (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 im Repository installiert / bereitgestellt wird.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>generate-jsw-scripts</id>
<phase>package</phase>
<goals>
<goal>generate-daemons</goal>
</goals>
<configuration>
<!--declare the JSW config -->
<daemons>
<daemon>
<id>myApp</id>
<mainClass>name.seller.rich.MyMainClass</mainClass>
<commandLineArguments>
<commandLineArgument>start</commandLineArgument>
</commandLineArguments>
<platforms>
<platform>jsw</platform>
</platforms>
</daemon>
</daemons>
<target>${project.build.directory}/appassembler</target>
</configuration>
</execution>
<execution>
<id>assemble-standalone</id>
<phase>integration-test</phase>
<goals>
<goal>assemble</goal>
</goals>
<configuration>
<programs>
<program>
<mainClass>name.seller.rich.MyMainClass</mainClass>
<!-- the name of the bat/sh files to be generated -->
<name>mymain</name>
</program>
</programs>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<repositoryLayout>flat</repositoryLayout>
<repositoryName>lib</repositoryName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/archive.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
Der Assembly-Deskriptor (in src / main / Assembly) zum Packen der Direcotry als Zip lautet:
<assembly>
<id>archive</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
Wenn Sie Ihr Projekt zu einem Kriegs- oder Ohr-Maven machen, kopieren Sie die Abhängigkeiten.
Mit dem Shade Plugin können Sie ein Uber Jar erstellen, in dem Sie alle Abhängigkeiten von Drittanbietern bündeln können.
Nur um kurz zu formulieren, was bereits gesagt wurde. Ich wollte eine ausführbare JAR-Datei erstellen, die meine Abhängigkeiten zusammen mit meinem Code enthält. Das hat bei mir funktioniert:
(1) Im Pom habe ich unter <build> <plugins> Folgendes eingefügt:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<mainClass>dk.certifikat.oces2.some.package.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
(2) Ausführen der mvn-Kompilierungsassembly: Die Assembly hat die gewünschte my-project-0.1-SNAPSHOT-jar-with-dependencies.jar im Zielverzeichnis des Projekts erstellt.
(3) Ich habe die JAR mit java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar ausgeführt
Es ist eine schwere Lösung zum Einbetten schwerer Abhängigkeiten, aber das Assembly Plugin von Maven erledigt den Trick für mich.
Die Antwort von @ Rich Seller sollte funktionieren, obwohl Sie in einfacheren Fällen nur diesen Auszug aus der Bedienungsanleitung benötigen sollten :
<project>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
Wenn Sie Probleme mit Abhängigkeiten haben, die nicht in der Datei WEB-INF / lib angezeigt werden, wenn Sie auf einem Tomcat-Server in Eclipse ausgeführt werden, sehen Sie sich Folgendes an:
Sie mussten lediglich die Maven-Abhängigkeiten unter Projekteigenschaften> Bereitstellungsassembly hinzufügen.