Problèmes des approches populaires
La plupart des réponses que vous trouverez sur Internet vous suggéreront soit d'installer la dépendance dans votre dépôt local, soit de spécifier une portée "système" dans le fichier de configuration de l'application. pom
et distribuez la dépendance avec les sources de votre projet. Mais ces deux solutions sont en fait imparfaites.
Pourquoi ne pas appliquer l'approche "Installer dans le Repo local" ?
Lorsque vous installez une dépendance dans votre référentiel local, elle y reste. Votre artefact de distribution fonctionnera bien tant qu'il aura accès à ce dépôt. Le problème est que dans la plupart des cas, ce référentiel résidera sur votre machine locale, il n'y aura donc aucun moyen de résoudre cette dépendance sur une autre machine. Il est clair que faire dépendre votre artefact d'une machine spécifique n'est pas une façon de gérer les choses. Sinon, cette dépendance devra être installée localement sur chaque machine travaillant avec ce projet, ce qui n'est pas mieux.
Pourquoi ne pas appliquer l'approche "System Scope" ?
Les bocaux dont vous dépendez avec l'approche "System Scope" ne sont ni installés dans un référentiel ni attachés à vos paquets cibles. C'est pourquoi votre paquet de distribution n'aura aucun moyen de résoudre cette dépendance lorsqu'il sera utilisé. Je crois que c'est la raison pour laquelle l'utilisation de la portée du système a été dépréciée. De toute façon, vous ne voulez pas vous reposer sur une fonctionnalité dépréciée.
La solution du référentiel statique dans le projet
Après avoir mis cela dans votre pom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
pour chaque artefact avec un identifiant de groupe de la forme x.y.z
Maven inclura l'emplacement suivant dans votre répertoire de projet dans sa recherche d'artefacts :
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
Pour en savoir plus, vous pouvez lire cet article de blog .
Utiliser Maven pour installer le répertoire du projet
Au lieu de créer cette structure à la main, je recommande d'utiliser un plugin Maven pour installer vos jars comme artefacts. Ainsi, pour installer un artefact dans un dépôt dans le projet sous le nom de repo
l'exécution du dossier :
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
Si vous choisissez cette approche, vous pourrez simplifier la déclaration du référentiel dans le fichier pom
à :
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
Une aide script
Puisque l'exécution de la commande d'installation pour chaque librairie est un peu ennuyeuse et certainement source d'erreurs, j'ai créé un fichier de type utilitaire script qui installe automatiquement tous les bocaux d'une lib
à un dépôt de projet, tout en résolvant automatiquement toutes les métadonnées (groupId, artifactId et etc.) à partir des noms de fichiers. Le script imprime également le xml des dépendances pour que vous puissiez le copier-coller dans votre fichier pom
.
Inclure les dépendances dans votre paquet cible
Lorsque vous aurez créé votre dépôt dans le projet, vous aurez résolu le problème de la distribution des dépendances du projet avec ses sources, mais depuis lors, l'artefact cible de votre projet dépendra de jars non publiés, donc lorsque vous l'installerez dans un dépôt, il aura des dépendances non résolues.
Pour résoudre ce problème, je suggère d'inclure ces dépendances dans votre paquetage cible. Vous pouvez le faire avec l'une des deux méthodes suivantes Plugin d'assemblage ou mieux avec le Plugin OneJar . La documentation officielle sur OneJar est facile à comprendre.
0 votes
Si vous utilisez Netbeans, suivez ces étapes : [Comment installer des modules dans le dépôt maven en utilisant Netbeans embedded Maven ?][1] [1] : stackoverflow.com/a/339874/530153
1 votes
Je tiens à souligner que ce lien stackoverflow.com/a/339874/530153 semble fonctionner pour installer les bocaux un par un.