143 votes

Télécharger toutes les dépendances maven dans un répertoire qui n'est PAS dans le référentiel ?

J'ai commencé à convertir mon projet à maven parce que j'avais besoin d'utiliser une bibliothèque qui était distribuée sous forme binaire sur maven seulement, mais après m'être cogné la tête contre le mur sur ce sujet pendant beaucoup trop longtemps, j'ai décidé d'arrêter de me faire du mal et de simplement utiliser Ant. J'aimerais que maven télécharge le jar et toutes ses dépendances transitives dans un répertoire de mon choix pour que je puisse simplement les enregistrer dans mon SCM comme je le fais habituellement et redevenir un développeur heureux.
Avez-vous une idée de la manière de le faire facilement ?

2 votes

Envisagez d'utiliser Ivy et obtenez la gestion des dépendances transitives dont vous avez besoin, avec la fourmi de confiance. Ou bien, prenez le taureau par les cornes et utilisez la structure de répertoire de Maven.

0 votes

Avez-vous essayé Ivy ?

5 votes

Non, mais j'ai épuisé toute ma patience en matière de commutation à ce stade. Peut-être la prochaine fois. Je veux revenir au codage. Peut-on le faire avec maven ?

289voto

Raghuram Points 26896

El plugin de dépendance maven peut potentiellement résoudre votre problème.

Si vous avez un pom avec toutes les dépendances du projet spécifiées, tout ce que vous devez faire est d'exécuter

mvn dependency:copy-dependencies

et vous trouverez le target/dependencies rempli de toutes les dépendances, y compris la transitive.

Ajout de La réponse de Gustavo d'en bas : Pour télécharger la dépendance sources vous pouvez utiliser

mvn dependency:copy-dependencies -Dclassifier=sources

(via Apache Maven Dependency Plugin doc ).

0 votes

Mais que faire si je veux copier toutes les dépendances dans mon dépôt local ? A quoi est-il censé servir ? Pourquoi faire une copie si elle est peut-être déjà dans le repo local. Il est local de toute façon.

1 votes

@ses Une construction maven standard (par exemple compiler, tester, empaqueter, installer, etc. ; je ne suis pas sûr pour valider) copie déjà toutes les dépendances dans votre dépôt local par défaut. Ceci n'est pas pour cela. C'est plutôt pour les situations où vous avez besoin des dépendances de votre application pour une raison quelconque. Je l'utilise en ce moment pour inspecter les bibliothèques dépendantes afin de détecter les définitions d'API redondantes (par exemple, certaines bibliothèques incluent des API Javax, qui peuvent entrer en conflit avec d'autres versions de la même API), mais c'est également utile si votre application a besoin que ses dépendances soient empaquetées avec elle pour la distribution, ou tout autre chose.

0 votes

@Raghuram Techniquement vous vous retrouvez avec tout (résolu) artefacts dans "cible/dépendances". De plus, il existe un problème potentiel de collisions de noms car la coordonnée "groupId" d'une dépendance est ignorée. En d'autres termes, "dependency:copy-dependencies" ne préserve pas la structure de la disposition.

19voto

Mark O'Connor Points 33201

Créer un ivy.xml pour lister les dépendances de votre projet :

<ivy-module version="2.0">
    <info organisation="org.demo" module="demo"/>
    <configurations defaultconfmapping="default"/>
    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="2.6"/>
        ..
    </dependencies>
</ivy-module>

Le téléchargement de ces jars et de leurs dépendances transitives peut maintenant être effectué de deux manières.

Ligne de commande

Ivy peut être exécuté comme un programme de ligne de commande . L'exemple suivant téléchargera dans un répertoire local "lib" :

java -jar ivy-2.2.0.jar -ivy ivy.xml -retrieve "lib/[artifact].[ext]"

Construction ANT

ivy est mieux utilisé lorsqu'il est intégré dans votre construction ANT. L'exemple de cible suivant télécharge les jars dans un répertoire local lib et génère un rapport HTML pour l'analyse des dépendances.

<target name="retrieve" description="Retrieve dependencies locally">
    <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"/>

    <ivy:report todir="${report.dir}" graph="false"/>
</target>

12voto

Baked Inhalf Points 165

J'ai finalement trouvé un moyen d'utiliser Maven. Depuis Eclipse, créez un nouveau projet Maven.

Téléchargez Maven, extrayez l'archive, ajoutez le fichier /bin au chemin.

Valider l'installation à partir de la ligne de commande en exécutant mvn -v (imprimera la version et le chemin d'installation de java)

Allez dans le dossier racine du projet (où pom.xml est situé) et exécutez :

mvn dependency:copy-dependencies

Tous les fichiers jar sont téléchargés dans /target/dependency .

Pour définir un autre répertoire de sortie :

mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"

Il est maintenant possible de réutiliser ce projet Maven pour tous les téléchargements de dépendances en modifiant le pom.xml.

Ajouter des jars au projet java par le chemin de construction -> configurer le chemin de construction -> bibliothèques -> ajouter des JARs .

2 votes

Il ne s'agit pas nécessairement d'un projet Eclipse. J'ai ouvert un fichier jar dans Java Decompiler et copié le pom.xml dans un dossier vide. J'ai appelé mvn dependency:copy-dependencies comme vous l'avez décrit à partir de ce dossier et j'ai obtenu tous les fichiers jar dépendants bien copiés dans un seul dossier.

9voto

user Points 1825

Sur la base de @Raghuram réponse, je trouve un tutoriel sur Copie des dépendances du projet Juste :

  1. Ouvrez votre projet pom.xml et trouvez ceci :

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
  2. Ensuite, remplacez le <plugins> ... </plugins> avec :

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>false</overWriteSnapshots>
              <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  3. Et appelez maven dans la ligne de commande mvn dependency:copy-dependencies

Après avoir terminé, il créera le dossier target/dependency dans tous les jar sur le répertoire courant où se trouve l'application pom.xml vies.

0 votes

Où dois-je taper la commande "mvn" ? Clic droit sur maven-project-> Maven -> .. ? ?

0 votes

Dans une ligne de commande du terminal, dans le dossier où se trouve le fichier pom.xml est activé.

1 votes

Ça n'a pas marché. Je pense que Maven est installé comme un plugin seulement. J'ai dû télécharger manuellement Maven également. Puis mvn dependency:copy-dependencies travaillé !

5voto

Gustavo Points 300

J'ai trouvé la commande suivante

mvn dependency:copy-dependencies -Dclassifier=sources

aquí maven.apache.org

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X