Ajouter une dépendance dans Maven

134

Comment puis-je prendre un fichier jar que j'ai et l'ajouter au système de dépendances dans maven 2? Je serai le mainteneur de cette dépendance et mon code a besoin de ce fichier jar dans le chemin de classe pour qu'il se compile.

Milhous
la source

Réponses:

139

Vous devrez le faire en deux étapes:

1. Donnez à votre JAR un groupId, un artifactId et une version et ajoutez-le à votre référentiel.

Si vous n'avez pas de référentiel interne et que vous essayez simplement d'ajouter votre JAR à votre référentiel local, vous pouvez l'installer comme suit, en utilisant n'importe quel groupId / artifactIds arbitraire:

mvn install:install-file -DgroupId=com.stackoverflow... -DartifactId=yourartifactid... -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/jarfile

Vous pouvez également le déployer dans votre référentiel interne si vous en avez un et que vous souhaitez le mettre à la disposition des autres développeurs de votre organisation. J'utilise simplement l'interface Web de mon référentiel pour ajouter des artefacts, mais vous devriez pouvoir accomplir la même chose en utilisant mvn deploy:deploy-file ....

2. Mettez à jour les projets dépendants pour référencer ce JAR.

Ensuite, mettez à jour la dépendance dans le pom.xml des projets qui utilisent le JAR en ajoutant ce qui suit à l'élément:

<dependencies>
    ...
    <dependency>
        <groupId>com.stackoverflow...</groupId>
        <artifactId>artifactId...</artifactId>
        <version>1.0</version>
    </dependency>
    ...
</dependencies>
Jack Leow
la source
3
Pouvez-vous ajouter plus de détails concernant le déploiement? Nous avons un référentiel interne, et je souhaite déployer mon fichier local jar installé dans ce référentiel afin que les autres développeurs et notre serveur de build obtiennent également le jar.
Kieveli
Cette réponse devrait obtenir tous les goûts! J'ai utilisé cela pour ajouter avec succès des dépendances pour mes projets maven sur Google App Engine et Heroku.
Leo C Han
93

Vous pouvez également spécifier une dépendance ne figurant pas dans un référentiel maven. Peut être utile lorsqu'il n'existe pas de référentiel maven central pour votre équipe ou si vous avez un serveur CI

    <dependency>
        <groupId>com.stackoverflow</groupId>
        <artifactId>commons-utils</artifactId>
        <version>1.3</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/commons-utils.jar</systemPath>
    </dependency>
Frédéric Morin
la source
4
Puis-je dépendre d'un autre fichier pom au lieu d'un pot?
Jayen
45

En fait, en enquêtant là-dessus, je pense que toutes ces réponses sont incorrectes. Votre question est trompeuse en raison de notre niveau de compréhension de maven. Et je dis notre parce que je viens de me présenter maven.

Dans Eclipse, lorsque vous souhaitez ajouter un fichier jar à votre projet, vous téléchargez normalement le fichier jar manuellement, puis déposez-le dans le répertoire lib . Avec maven, vous ne le faites pas de cette façon. Voici ce que vous faites:

  • Accéder à mvnrepository
  • Recherchez la bibliothèque que vous souhaitez ajouter
  • Copiez le dependencyrelevé dans votrepom.xml
  • reconstruire via mvn

Maintenant, mavenva se connecter et télécharger le jaravec la liste des dépendances, et résoudre automatiquement toutes les dépendances supplémentaires qui jarpeuvent avoir eu. Donc, si la jarjournalisation des communs est également nécessaire, elle sera également téléchargée.

Kieveli
la source
5
J'utilise Spring Tool Suite (basé sur Eclipse). Après les étapes 1 et 2 de la solution ci-dessus: 1. Ouvrez pom.xml dans l'éditeur STS, cliquez sur l'onglet "Dépendances" en bas 2. Cliquez sur "Ajouter" dans le groupe Dépendances 3. Copiez / collez les informations de dépendance de l'onglet "Maven" à partir de la fenêtre du navigateur ( groupId, artifactId, version) dans les champs correspondants dans la fenêtre contextuelle "Select Dependency" dans STS 4. Cliquez sur OK 5. Enregistrer pom.xml Une fois enregistré, mon répertoire maven sur le disque dur et le paramètre de dépendance maven dans STS sont mis à jour en quelques secondes. Vous pouvez modifier directement le .xml, mais l'utilisation de l'outil peut aider à éviter les problèmes de format xml.
Chris R
2
C'est en effet la manière préférée de faire les choses, mais il y a des situations où vous ne pouvez pas faire cela (par exemple, le jar propriétaire n'est pas sur mvnrepository). Dans ce cas, vous aurez besoin d'un moyen de l'ajouter «manuellement», auquel cas une autre réponse aurait la solution.
Thunderforge
Il est également possible que la question posée soit moins une question de débutant. Je mets cela pour les personnes qui cherchent à faire quelque chose sans la formulation appropriée qui vient du temps passé à travailler avec maven. (Tel que j'étais à l'époque)
Kieveli
KISS Merci, j'ai lu que c'est l'équivalent C # Nuget en Java, mais j'essayais de comprendre sur quel bouton cliquer ou cmd à exécuter. Pas exactement un 1: 1 mais fait le travail.
Terrance
Comment reconstruire un projet dans maven dans intelleJ?
Irfan Nasim
14

Je ferais ceci:

  1. ajoutez la dépendance comme vous le souhaitez dans votre pom:

    <dependency>
            <groupId>com.stackoverflow...</groupId>
            <artifactId>artifactId...</artifactId>
            <version>1.0</version>
    </dependency>
    

  2. l'exécuter mvn installessaiera de télécharger le fichier jar et échouera. Sur le processus, il vous donnera la commande complète d'installation du fichier jar avec le message d'erreur. Copiez cette commande et exécutez-la! facile hein?!

user40032
la source
3

Je suppose que vous demandez comment pousser une dépendance vers un "référentiel bien connu", et pas simplement comment mettre à jour votre POM.

Si oui, alors c'est ce que vous voulez lire.

Et pour ceux qui cherchent à mettre en place un serveur de référentiel interne, regardez ici (la moitié du problème avec l'utilisation de Maven 2 est de trouver la documentation)

kdgregory
la source
Je voudrais entretenir moi-même une dépendance. Ceci est une bibliothèque interne.
Milhous