Tworzenie hermetycznych budów maven
Próbuję stworzyć sposób, w jaki hermetyczne kompilacje można osiągnąć, nadal opierając się na zależnościach SNAPSHOT w projekcie.
Na przykład powiedzmy, że mam projekt, który ma taką strukturę zależności:
┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
└ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT
Chciałbym rozwiązać wszystkie zależności SNAPSHOT lokalnie do czegoś, co jest związane z moją aktualną wersją, a następnie wdrożyć je jako wydania do mojego repozytorium wersji Nexusa. Nie wszystkie te zależności są wewnętrzne, więc nie mogę po prostu wydać każdego z nich.
W tym przykładzieother-1.2-SNAPSHOT
stałoby się coś takiegoother-1.2-mine-1.2.3
ithing-3.1-SNAPSHOT
stanie sięthing-3.1-mine-1.2.3
. Jest to stosunkowo proste w około 60 liniach Pythona.
Problem polega jednak na rozwiązywaniu przechodnich SNAPSHOT w konkretnych wersjach. Muszę też się przekonaćgizmo-6.1.3-SNAPSHOT
dogizmo-6.1.3-mine.1.2.3
i mająthing-3.1-mine-1.2.3
zależy od tego.
To tylko przykład jednego ze sposobów osiągnięcia tego, czego chcę. Celem jest to, że za rok lub dwa w dół będę mógł sprawdzić moją wersję wydania 1.2.3 i móc uruchomićmvn clean package
lub tym podobne, bez martwienia się o rozwiązywanie długotrwałych zależności SNAPSHOT.
Ważne jest, aby ta gałąź była kompilowalna i nie tylko zachowywała wszystkie zależności, używając czegoś takiego jakjar-and-dependencies
funkcjonalność wtyczki zespołu. Chciałbym potencjalnie móc zmodyfikować pliki źródłowe i utworzyć inną wersję wydania (np. Zastosowanie poprawki).
Więc,
Czy jest coś takiego jak to, które będzie w stanie konwertować zależności SNAPSHOT w sposób rekurencyjny na konkretny?Czy są jakieś wtyczki, które zarządzają takimi rzeczami? Wtyczka do wydania obiecała kilka opcji konfiguracyjnychbranch
cel, ale nie rozwiązuje zewnętrznych depotów w takim stopniu, w jakim chcę.Czy są dostępne inne techniki tworzenia hermetycznych kompilacji Maven?