Hermetische Maven-Builds erstellen

Ich versuche, einen Weg zu finden, auf dem hermetische Builds erreicht werden können, während Sie sich in Ihrem Projekt immer noch auf SNAPSHOT-Abhängigkeiten verlassen.

Nehmen wir zum Beispiel an, ich habe ein Projekt mit einer Abhängigkeitsstruktur wie folgt:

             ┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
             └ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT

Was ich tun möchte, ist, alle SNAPSHOT-Abhängigkeiten lokal auf etwas aufzulösen, das mit meiner aktuellen Version zusammenhängt, und diese dann als Releases im Release-Repository meines Nexus bereitzustellen. Nicht alle diese Abhängigkeiten sind intern, daher kann ich nicht einfach eine Freigabe für jede machen.

Also, in diesem Beispielother-1.2-SNAPSHOT würde sowas werdenother-1.2-mine-1.2.3 undthing-3.1-SNAPSHOT würde werdenthing-3.1-mine-1.2.3. Dies ist in etwa 60 Zeilen Python relativ trivial.

Das Problem besteht jedoch darin, transitive SNAPSHOTs in konkrete Versionen aufzulösen. Also muss ich auch konvertierengizmo-6.1.3-SNAPSHOT zugizmo-6.1.3-mine.1.2.3 und habenthing-3.1-mine-1.2.3 hängt davon ab.

Dies ist nur ein Beispiel für einen Weg, um das zu erreichen, was ich will. Das Ziel ist, dass ich in ein oder zwei Jahren meinen Release-Zweig für Version 1.2.3 auschecken und ausführen kannmvn clean package oder ähnliches, ohne sich Gedanken über das Auflösen längst vergangener SNAPSHOT-Abhängigkeiten machen zu müssen.

Es ist wichtig, dass dieser Zweig kompilierbar ist und nicht nur alle Abhängigkeiten mit so etwas wie dem behältjar-and-dependencies Funktionalität des Assembly Plugins. Ich möchte möglicherweise in der Lage sein, die Quelldateien zu ändern und ein weiteres Release zu erstellen (z. B. Anwenden eines Hotfix).

So,

Gibt es so etwas, das in der Lage ist, SNAPSHOT-Abhängigkeiten rekursiv in konkrete Abhängigkeiten umzuwandeln?Gibt es Plugins, die so etwas für Sie verwalten? Das Release-Plugin hatte mit einigen Konfigurationsoptionen auf seinem Versprechenbranch Ziel, aber es löst externe Abhängigkeiten nicht in dem Maße auf, wie ich es will.Sind andere Techniken verfügbar, um hermetische Maven-Builds zu erstellen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage