web-dev-qa-db-fra.com

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

J'ai commencé à convertir mon projet en maven parce que je devais utiliser une bibliothèque qui était distribuée sous forme binaire sur maven uniquement, mais après m'être cogné la tête contre le mur pendant trop longtemps, j'ai décidé de ne plus me blesser et d'utiliser Fourmi. J'aimerais simplement que maven télécharge le pot et toutes ses dépendances transitives dans un répertoire de mon choix afin que je puisse simplement les archiver dans mon SCM comme d'habitude, et redevenir un développeur heureux.
Des idées comment faire cela facilement?

105
chubbsondubs

Le plugin maven dependency peut potentiellement résoudre votre problème.

Si vous avez une pom avec toutes vos dépendances de projet spécifiées, tout ce que vous avez à faire est de lancer

mvn dependency:copy-dependencies

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

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

mvn dependency:copy-dependencies -Dclassifier=sources

(via doc du plugin Apache Maven Dependency Plugin ).

222
Raghuram

Créez un fichier ivy.xml pour répertorier 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 pots et de leurs dépendances transitives peut maintenant être effectué de deux manières.

Ligne de commande

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

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

ANT construire

ivy est mieux utilisé lorsqu'il est intégré à votre build ANT. L'exemple de cible suivant télécharge les fichiers JAR dans un répertoire lib local 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>
19
Mark O'Connor

Basé sur @Raghuram answer, je trouve un tutoriel sur Copier les dépendances du projet , Just:

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

    <project>
      [...]
      <build>
        <plugins>
          ...
        </plugins>
      </build>
      [...]
    </project>
    
  2. Puis remplacez le <plugins> ... </plugins> par:

    <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

Une fois terminé, il créera le dossier target/dependency dans toutes les dépendances de la jar sur le répertoire en cours où réside le pom.xml.

6
user

J'ai enfin compris comment utiliser Maven. Depuis Eclipse, créez un nouveau projet Maven. 

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

Validez l'installation depuis la ligne de commande en exécutant mvn -v (imprimera la version et le chemin d'installation Java)

Passez au dossier racine du projet (où se trouve pom.xml) 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épendance en modifiant le fichier pom.xml.

Ajouter des fichiers JAR au projet Java par chemin de construction -> configurer le chemin de construction -> bibliothèques -> ajouter des JAR ..

5
Baked Inhalf

J'ai trouvé la prochaine commande

mvn dependency:copy-dependencies -Dclassifier=sources

ici maven.Apache.org

3
Gustavo

Vérifiez si vous avez des fichiers de configuration dans le répertoire ${MAVEN_HOME}/conf tels que settings.xml. Ces fichiers remplacent les paramètres du dossier .m2 et, à cause de cela, le dossier du référentiel à partir de .m2 risque de ne pas être visible ou ignoré.

0
MagGGG