Cela semble être une question simple mais j'ai trouvé cela difficile en raison du paradigme extrêmement rigoureux des cycles de vie et des phases de Maven :
En supposant que dans un projet Maven multi-modules, plusieurs plugins sont utilisés dans différentes phases pour réécrire le fichier pom.xml en versions plus efficaces, les exemples notables sont :
-
maven-shade-plugin (si est activé) : lorsque le uber-jar ombré doit être publié, le plugin peut éliminer les dépendances qui n'ont pas besoin d'être incluses. Toujours exécuté dans la phase de package.
-
flatten-maven-plugin : permet au pom.xml publié du module de ne plus dépendre du pom parent, en remplaçant les références de propriétés par leurs valeurs réelles. Peut être exécuté à n'importe quelle phase, mais pour maintenir l'interopérabilité avec maven-shade-plugin, il est également limité à la phase de package (voir https://issues.apache.org/jira/browse/MSHADE-323)
Lorsqu'ils sont combinés avec d'autres modules, il semble que le moteur de construction maven reactor se débat fréquemment avec la version du pom réécrit à utiliser pour calculer la dépendance transitive. Idéalement, la version finale après la phase de package devrait être utilisée. Mais dans la dernière version de Maven (3.6.3), il est uniquement capable d'utiliser le pom.xml AVANT les deux réécritures, sans dépendances réduites et toutes les propriétés non remplacées correctement.
Mes questions sont :
-
Quel est l'intérêt de cette conception ? Pourquoi utiliser un pom.xml incomplet lorsque tous les plugins le remplacent explicitement ?
-
Comment remplacer ce comportement de sorte que la version finale du pom.xml soit toujours générée et utilisée, indépendamment de l'objectif Maven demandé ?
MISE À JOUR 1 : Pour le moment, j'utilise une simple contournement en :
-
divisant le premier module en un projet Maven indépendant, avec à la fois maven-shade et flatten-maven plugin invoqués à la phase de package. (Je n'ai pas de preuve directe mais je soupçonne que c'est ainsi que les dépendances reconditionnées comme
spark-project.hive
https://mvnrepository.com/artifact/org.spark-project.hive/hive-common ont été faites, voir https://issues.apache.org/jira/browse/SPARK-20202 pour une discussion pertinente) -
utiliser un script shell pour compiler/publier le projet ci-dessus et le projet multi-modules principal séquentiellement.
Je ne suis pas un grand fan des scripts shell, et je pense que cela trahit la prouesse agnostique de la plate-forme que la communauté JVM chérit. Donc si vous avez une meilleure solution, veuillez la poster ici et je l'accepterai en fonction de sa popularité.
Merci beaucoup pour votre avis