2017-07-04 1 views
0

Je travaille sur un grand projet avec de nombreuses dépendances maven dont certaines peuvent être transitives.Comment maven packages dépend des snapshots?

Je voudrais savoir comment maven les paquets les dépendances de snapshot, parce que quand j'ouvre un artefact je vois que, parfois, les bibliothèques sont emballées avec INSTANTANÉ en leur nom et d'autres fois il y a un horodatage, comme dans cette image:

enter image description here

ce qui me préoccupe le plus est que l'emballage même avec l'argument -U les bibliothèques INSTANTANÉ correspondent pas toujours à la dernière version disponible sur le référentiel.

Dans le fichier pom.xml, les versions de dépendance se terminent toujours par "-SNAPSHOT" et nous utilisons maven 3.3.3.

+0

S'il vous plaît mettre texte plutôt que des nombreuses personnes qui lisent ici ont des limites du pare-feu ... Vous parlez à propos de l'emballage. Quel genre d'emballage? WAR/EAR/JAR/ZIP? Comment faites-vous cela? Les meilleurs seraient des fichiers pom complets ... Parfois, les gens utilisent maven-assembly-plugin avec un empaquetage du dossier cible qui peut résulter en de telles choses. etc... – khmarbaise

Répondre

1

Les instantanés sont gérés différemment dans le référentiel local et dans les référentiels distants.

Le mvn install installe SNAPSHOTS en tant que -SNAPSHOT dans le référentiel local, ce qui convient aux versions locales. Les référentiels distants contiennent les versions SNAPSHOT avec horodatages car ils sont les résultats de mvn deploy. Pendant les générations locales, ces deux éléments peuvent se mélanger, car il est possible qu'un artefact soit le résultat de la génération locale (-SNAPSHOT) et que l'autre soit téléchargé à partir d'un référentiel distant (-20170623.063055-4).

Le vrai problème est qu'ils peuvent mélanger de manière inattendue. Maven fait de son mieux pour obtenir le dernier SNAPSHOT à partir de n'importe quel dépôt disponible. Cela se produira très probablement lorsque vous utiliserez le -U car cela force la vérification sur les dépôts distants.

Parfois, cela entraîne une erreur: lib-a et lib-b sont les dépendances, vous avez construit à la fois il y a 5 minutes, mais le CI construit lib-a il y a 3 minutes alors la construction utilisera le CI lib-a et votre lib-b comme CI a une version plus récente . Si vous avez modifié quelque chose dans le lib-a mais que le CI lib-a ne le contient pas car il n'est pas encore validé, ce sera un problème très ennuyeux. La meilleure stratégie consiste à éviter de déployer des instantanés dans des référentiels distants.

Ceci est un bon article sur le référentiel internes: https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/

Il y a également un lié SO réponse: https://stackoverflow.com/a/32416454/8230378