Comment copier les dépendances d'exécution de mon projet dans le dossier target/lib
?
À l'heure actuelle, après mvn clean install
, le dossier target
contient uniquement le fichier jar de mon projet, mais aucune des dépendances d'exécution.
Cela fonctionne pour moi:
<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>
La meilleure approche dépend de ce que vous voulez faire:
mvn install dependency:copy-dependencies
Fonctionne pour moi avec le répertoire des dépendances créé dans le dossier cible. J'aime ça!
Jetez un coup d'œil au plugin dépendance Maven , plus précisément à l'objectif dépendance: dépendances de copie Jetez un coup d’œil à l’exemple sous le titre La dépendance: dépendances à la copie mojo. Définissez la propriété de configuration outputDirectory sur $ {basedir}/target/lib (je crois que vous devrez tester).
J'espère que cela t'aides.
Une solution simple et élégante pour le cas où il faut copier les dépendances dans un répertoire cible sans utiliser d’autres phases de maven (j’ai trouvé cela très utile lorsque je travaille avec Vaadin).
Exemple de pom complet:
<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>
Puis lancez mvn process-sources
Les dépendances du fichier jar peuvent être trouvées dans /target/dependency
Si vous voulez le faire de façon occasionnelle (et donc ne voulez pas changer votre POM), essayez cette ligne de commande:
target/dependencies
.
Essayez quelque chose comme ça:
<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>
Tout ce dont vous avez besoin est l'extrait suivant dans le build/plugins
de 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>
Ce qui précède s’exécutera dans la phase package
lorsque vous exécuterez
mvn clean package
Et les dépendances seront copiées dans le répertoire outputDirectory spécifié dans l’extrait, c’est-à-dire lib
dans ce cas.
Si vous ne voulez le faire que de temps en temps, aucune modification du fichier pom.xml n'est requise. Il suffit de lancer ce qui suit:
mvn clean package dependency:copy-dependencies
Pour remplacer l'emplacement par défaut, à savoir ${project.build.directory}/dependencies
, ajoutez une propriété système nommée outputDirectory
, i.e.
-DoutputDirectory=${project.build.directory}/lib
supposant
voici ce qui a fonctionné pour moi:
Dépendances d'installation de mvn: dépendances de copie -DincludeScope = runtime -DoutputDirectory = target/lib
Si vous souhaitez livrer un ensemble de votre fichier jar d'application, ainsi que toutes ses dépendances et certains scripts pour appeler MainClass, consultez le appassembler-maven-plugin .
La configuration suivante générera des scripts pour Windows et Linux afin de lancer l'application (avec un chemin généré référençant tous les fichiers jars de dépendance, téléchargez toutes les dépendances (dans un dossier lib sous target/appassembler). Le plugin Assembly peut ensuite être utilisé pour empaqueter tout le répertoire appassembler dans un zip qui est installé/déployé avec le jar dans le référentiel.
<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>
Le descripteur Assembly (dans src/main/Assembly) pour empaqueter le répertoire en tant que Zip serait:
<Assembly>
<id>archive</id>
<formats>
<format>Zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</Assembly>
Si vous faites de votre projet une guerre ou une oreille type maven copiera les dépendances.
Vous pouvez utiliser le Shade Plugin pour créer un uber jar dans lequel vous pouvez regrouper toutes vos dépendances tierces.
Juste pour préciser ce qui a déjà été dit en bref. Je voulais créer un fichier JAR exécutable qui incluait mes dépendances avec mon code. Cela a fonctionné pour moi:
(1) Dans le pom, sous <build> <plugins>, j'ai inclus:
<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) Lancer mvn compile Assembly: assembly a généré le fichier my-project-0.1-SNAPSHOT-jar-with-dependencies.jar souhaité dans le répertoire cible du projet.
(3) J'ai exécuté le fichier JAR avec Java -jar my-project-0.1-SNAPSHOT-jar-with-dependencies.jar.
C'est une solution lourde pour incorporer des dépendances lourdes, mais le plug-in Assembly Plugin de Maven fait l'affaire pour moi.
@ Rich Seller answer devrait fonctionner, bien que dans le cas simple, vous n'auriez besoin que de cet extrait du guide d'utilisation :
<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>
Si vous rencontrez des problèmes liés à des dépendances n'apparaissant pas dans le fichier WEB-INF/lib lors de l'exécution sur un serveur Tomcat dans Eclipse, consultez la page suivante:
Vous deviez simplement ajouter les dépendances Maven dans Propriétés du projet> Assemblage de déploiement.
<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 C'est mon pom, est-ce que je manque quelque chose? le jar créé avec les dépendances, ne contient aucune classe lib ou jar