Je travaille sur un assez gros projet Maven. Nous avons probablement environ 70 artefacts individuels, qui sont à peu près divisés en deux bibliothèques de code partagé et peut-être dix applications qui les utilisent. Tous ces éléments vivent dans l'espace de noms com.mycompany.*
.
La plupart du temps, nous utilisons des compilations de snapshots. Donc, pour faire une compilation complète d'une application, je pourrais d'abord construire les projets de bibliothèque afin qu'ils soient installés dans mon référentiel local (comme, par exemple, mycompany-libname-2.4-SNAPSHOT.jar
).
Le problème est que lorsque je vais ensuite créer les applications. Pour une raison quelconque, Maven veut vérifier les deux principaux référentiels publics (maven-net-repo et java-net-repo) pour les mises à jour de tous les mycompany-*-SNAPSHOT.jar
artefacts. Bien sûr, ils ne sont pas trouvés là-bas, et tout finit par revenir aux versions que je viens de créer dans mon référentiel local, mais j'aimerais que Maven arrête de faire cela parce que (a) cela me fait me sentir comme un mauvais net. pour vérifier constamment ces référentiels pour des choses qui ne seront jamais là, et (b) cela ajoute une latence réseau inutile et ennuyeuse dans mon processus de construction.
J'ai commencé à exécuter maven en mode hors ligne la plupart du temps pour contourner ce problème, mais ce n'est pas l'idéal car parfois une dépendance à une bibliothèque publique sera mise à jour. Donc, ce que je recherche, c'est une solution qui empêchera Maven de vérifier les mises à jour des référentiels donnés pour les artefacts qui répondent à certains critères - dans ce cas, je serais heureux si Maven ignorait les versions de SNAPSHOT ou les artefacts qui étaient dans l' com.mycompany
espace de noms.
la source
De plus, vous pouvez utiliser
-o
ou--offline
dans la ligne de commande mvn qui mettra maven en "mode hors ligne" afin qu'il ne vérifie pas les mises à jour. Vous recevrez un avertissement indiquant que vous ne pourrez pas obtenir des dépendances qui ne sont pas déjà dans votre dépôt local, mais ce n'est pas grave.la source
Quelque chose qui est maintenant disponible dans maven est
ou en bref
la source
set offline := true
dans la session ouoffline := true
dansbuild.sbt
.nsu
option est interrompue dans la version 3.0.3 (voir MNG-5064 ). Pour utiliser cette option de manière fiable, vous devrez peut-être effectuer une mise à niveau vers au moins la version 3.0.4 ou la version 3.0.5Mise à jour: J'aurais probablement dû commencer par ceci car vos projets sont des INSTANTANÉS. Cela fait partie de la sémantique SNAPSHOT que Maven vérifiera les mises à jour sur chaque build. Être un SNAPSHOT signifie qu'il est volatil et sujet à changement, donc les mises à jour doivent être vérifiées. Cependant, il convient de souligner que le super POM de Maven configure le central pour désactiver les instantanés.Maven ne devrait donc jamais vérifier les mises à jour des SNAPSHOTs sur le central à moins que vous n'ayez remplacé cela dans votre propre pom / paramètres.
Vous pouvez configurer Maven pour utiliser un miroir pour le référentiel central, cela redirigera toutes les demandes qui iraient normalement au centre de votre référentiel interne.
Dans votre settings.xml, vous ajouteriez quelque chose comme ceci pour définir votre référentiel interne en tant que miroir pour central:
Si vous utilisez un gestionnaire de référentiel comme Nexus pour votre référentiel interne. Vous pouvez configurer un référentiel proxy pour proxy central, de sorte que toutes les demandes qui seraient normalement envoyées à Central sont plutôt envoyées à votre référentiel proxy (ou à un groupe de référentiels contenant le proxy), et les demandes suivantes sont mises en cache dans le gestionnaire de référentiel interne. Vous pouvez même définir le délai d'expiration du cache proxy sur -1, de sorte qu'il ne demandera jamais de contenu du central qui se trouve déjà sur le référentiel proxy.
Une solution plus basique si vous travaillez uniquement avec des référentiels locaux est de définir la politique de mise à jour pour le référentiel central sur "jamais", cela signifie que Maven ne vérifiera que les artefacts qui ne sont pas déjà dans le référentiel local. Cela peut ensuite être remplacé sur la ligne de commande si nécessaire en utilisant le commutateur -U pour forcer Maven à vérifier les mises à jour.
Vous configureriez le référentiel (dans votre pom ou un profil dans le settings.xml) comme suit:
la source
updatePolicy
élément passe sous l' élémentsnapshots
oureleases
. Voir: maven.apache.org/settings.htmlTrès simple :
Dans votre Super POM parent ou setting.xml, utilisez
C'est mes conseils
la source
J'ai eu un problème similaire à celui-ci,
La définition de updatePolicy sur "jamais" ne fonctionnait pas. La suppression de ces repo était la façon dont je l'ai résolu. ps: je suivais ce tutoriel sur les services web (btw, probablement le meilleur tutoriel pour ws pour java)
la source