Comment Maven choisit entre une dépendance locale ou une dépendance Nexus ?

Lors d’un build Maven, celui-ci doit récupérer des dépendances. Il a le choix entre utiliser :
– une dépendance locale, elles sont dans le répertoire .m2 sur votre poste
Lorsque l’on builde du code en local (mvn install), les jars sont copiés dans ce .m2
– une dépendance distante sur Nexus
Elle sont créées par le server de build

Comment Maven choisit entre une dépendance locale ou Nexus ?

– Pour une dépendance en SNAPSHOT, il se base sur la date de build, si une version plus récente existe sur le server, c’est celle-ci qui est utilisée.
– Pour une dépendance en release, si elle existe en local, il ne va pas la récupérer sur le server.

Paramétrer ce comportement dans le settings.xml
Il y a un paramétrage pour les dépendances, et un pour les dépendances pour les plugins maven. Et pour chacun, il y a une partie pour les snapshots et une partie pour les versions releases.

<repository>
 <id>public</id>
 <name>Public Repositories</name>
 <url>http://ournexus.com:8081/nexus/content/groups/public</url>
 <releases>
  <enabled>true</enabled>
  <updatePolicy>XXX</updatePolicy>
  </releases>
 <snapshots>
  <enabled>true</enabled>
  <updatePolicy>XXX</updatePolicy>
 </snapshots>
</repository>

where XXX can be:
always: Maven will check for a newer version on every build;
daily, the default value;
interval:XXX: an interval in minutes (XXX)
never: Maven will never try to retrieve another version. It will do that only if it doesn’t exist locally. With the configuration, SNAPSHOT version will be handled as the stable libraries.

https://maven.apache.org/settings.html

Problème si vous ne compilez pas tous les modules régulièrement, ou si l’on a un problème d’ordre de build dans notre projet :
il est possible d’utiliser un vieux SNAPSHOT d’un de nos modules provenant de Nexus, alors que l’on pense utiliser un SNAPSHOT local.