Wir haben einen Reactor Pom, dessen Kindmodule unabhängig voneinander versioniert werden, d. Das untergeordnete Modul deklariert seine eigene Version, die unabhängig von der Version des Haupt-Pom ist. Es besteht jedoch eine Abhängigkeit zwischen zwei untergeordneten Modulen. Wie sollte diese Abhängigkeit konfiguriert werden, um immer die Version zu verwenden, die vom tatsächlichen Modul des Reaktors pom deklariert wird?
Ich würde erwarten, dass ich das Abhängigkeitsmanagement im Root-Pom einrichten und einige implizite Eigenschaften verwenden kann, um die Version der untergeordneten Module zu bestimmen, aber die beste solche Option finde ich:
%Vor%oder einfach
%Vor%, so dass das Abhängigkeitsmanagement im root pom wie folgt aussehen würde:
%Vor%sieht unzuverlässig aus, da sich die Reihenfolge des Reaktors ändern kann, wenn neue Module oder Abhängigkeiten hinzugefügt werden.
Vielleicht wird dieses Anwendungsszenario vom Design abgeraten und dann würde ich gerne wissen warum.
Bearbeiten: Wie in Kommentaren vorgeschlagen, kann die Deklaration globaler Eigenschaften mit untergeordneten Versionen in übergeordneten POM eine Option für neuere Versionen von Maven sein. Ich würde jedoch gerne eine Analyse in Bezug auf weitere Konsequenzen wie Workflow, Veröffentlichung, Verzeichnis- und Repository-Einstellungen, einige Plugins-Verwendung (z. B. Version Plugin) etc. sehen. Zum Beispiel denke ich, dass direkte Folge dieses Ansatzes wäre, dass ich veröffentlichen müsste Elternmodul, wenn eines der untergeordneten Module freigegeben wird. Obwohl dies machbar ist, würde es die ursprüngliche Idee einer unabhängigen Versionierung beeinträchtigen.
Ich habe einen Thread mit diesem Thema auf Maven-Mailingliste , ich schreibe TL; DR antworte hier:
Meine erwartete Lösung mit impliziten Eigenschaften ist im Allgemeinen nicht möglich, da sie nicht nur während des Builds ausgewertet wird, sondern auch, wenn das erstellte Artefakt als Abhängigkeit in anderen Projekten verwendet wird und die Evaluierung unvorhersehbare Ergebnisse haben kann, weil der Kontext der impliziten Eigenschaften ist ganz anders. (Ich bin dumm, ich hatte das gleiche Problem schon vor einiger Zeit mit $ {project.version} -Eigenschaft)
Generell betrachtet die Frage nur ein Szenario in einem Projekt aus einer Sicht des Entwicklers. Im Mailinglisten-Thread gibt es andere Gesichtspunkte, die dazu führen, dass die Versionsnummern der Abhängigkeit entweder im Abhängigkeitsmanagement oder in expliziten Eigenschaften festgeschrieben werden, selbst wenn etwas anderes möglich wäre.
Ich würde vorschlagen, dependencyManagement im übergeordneten Pom zu verwenden. Sie können dort alle Versionen aller Abhängigkeiten definieren. Sie können dann die Version der Abhängigkeiten in den verschiedenen Modulen weglassen
Also im Elternteil:
%Vor%Im Modul verwenden Sie dann
%Vor%Die in der dependencyManagement definierte Version wird verwendet.
Ich würde empfehlen, die Version aller Abhängigkeiten wie diese im übergeordneten Pom zu definieren.
Tags und Links maven maven-reactor