Wie bekomme ich die Laufzeitabhängigkeiten meines Projekts in den Ordner target/lib
kopiert?
Nach mvn clean install
enthält der target
-Ordner nur das jar meines Projekts, jedoch keine Laufzeitabhängigkeiten.
Das funktioniert für mich:
<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>
Der beste Ansatz hängt davon ab, was Sie tun möchten:
mvn install dependency:copy-dependencies
Funktioniert für mich mit Abhängigkeiten im Zielordner. Mag ich!
Schauen Sie sich das Plugin Maven Abhängigkeits an, insbesondere das Dependency: copy-Dependencies Ziel . Werfen Sie einen Blick auf das Beispiel unter der Überschrift The dependency: copy-dependencies mojo. 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 die Abhängigkeiten in ein Zielverzeichnis kopiert werden müssen, ohne andere Phasen von maven zu verwenden.
Vollständiges 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 mvn process-sources
ausführen
Die Abhängigkeiten der JAR-Datei finden Sie in /target/dependency
.
Wenn Sie dies gelegentlich tun möchten (und Ihr POM daher nicht ändern möchten), versuchen Sie es mit dieser Befehlszeile:
target/dependencies
platziert.
Versuchen Sie etwas so:
<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>
Alles was Sie brauchen, ist das folgende Snippet in build/plugins
von pom.xml:
<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, wenn Sie es ausführen
mvn clean package
In diesem Fall werden die Abhängigkeiten in das im Snippet angegebene outputDirectory kopiert, d. H. 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
Fügen Sie zum Überschreiben des Standardverzeichnisses ${project.build.directory}/dependencies
eine Systemeigenschaft mit dem Namen outputDirectory
hinzu, d. H.
-DoutputDirectory=${project.build.directory}/lib
vorausgesetzt
hier ist was für mich gearbeitet:
mvn install Abhängigkeit: Kopie-Abhängigkeiten -DincludeScope = Laufzeit -DoutputDirectory = Ziel/lib.
Wenn Sie ein Bündel Ihrer Anwendungsjar zusammen mit allen Abhängigkeiten und einigen Skripts zum Aufrufen der MainClass bereitstellen möchten, schauen Sie sich das appassembler-maven-plugin an.
Die folgende Konfiguration generiert Skripts für Windows und Linux, um die Anwendung zu starten (mit einem generierten Pfad, der auf alle Abhängigkeitsjobs verweist, laden Sie alle Abhängigkeiten herunter (in einen lib-Ordner unterhalb von target/appassembler). Anschließend kann das Assembly Plugin verwendet werden Um das gesamte Appassembler-Verzeichnis in ein Zip-Paket zu packen, das 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 des Verzeichnisses als Zip wäre:
<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 Gehörtyp machen, kopiert Maven die Abhängigkeiten.
Sie können das Shade Plugin verwenden, um ein Uber-Jar zu erstellen, in dem Sie alle Abhängigkeiten von Drittanbietern bündeln können.
Um es kurz zu formulieren, was bereits gesagt wurde. Ich wollte eine ausführbare JAR-Datei erstellen, die neben meinem Code auch Abhängigkeiten enthielt. Das hat für mich funktioniert:
(1) Im pom unter <build> <plugins> habe ich 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 von mvn compile Assembly: Die Assembly erzeugte das gewünschte my-project-0.1-SNAPSHOT-jar-with-dependencies.jar im Zielverzeichnis des Projekts.
(3) Ich habe JAR mit Java -jar-mein-Projekt-0.1-SNAPSHOT-jar-with-dependencies.jar ausgeführt
Es ist eine schwierige Lösung für das Einbetten starker Abhängigkeiten, aber Maven Assembly Plugin macht den Trick für mich.
@ Die Antwort von Rich Seller sollte funktionieren, obwohl Sie in einfacheren Fällen nur diesen Auszug aus dem usage guide 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 bei der Ausführung auf einem Tomcat-Server in Eclipse Probleme in Bezug auf Abhängigkeiten auftreten, die nicht in der Datei WEB-INF/lib enthalten sind, lesen Sie Folgendes:
Sie mussten lediglich die Maven-Abhängigkeiten in Projekteigenschaften> Bereitstellungsassembly hinzufügen.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.Edge</groupId>
<artifactId>STORM2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>STORM2</name>
<url>http://maven.Apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<profiles>
</profiles>
<build>
<plugins>
<plugin>
<artifactId>maven-Assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.Edge.STORM2.LogAnalyserStorm</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.Apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
@john Das ist mein Pom, fehlt mir etwas? Die erstellten jar-with-Abhängigkeiten enthalten keine lib-Klasse oder -Jar