Próbuję stworzyć sposób, w jaki hermetyczne kompilacje można osiągnąć, nadal opierając się na zależnościach SNAPSHOT w projekcie.Tworzenie Hermetic Maven Buduje
Dla celów przykładu, że mam projekt, który ma strukturę zależności takiego:
┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
└ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT
Co chciałbym zrobić, to rozwiązać wszystkie zależności SNAPSHOT lokalnie do czegoś, co jest związane z moją bieżąca wersja, a następnie wdrażaj je jako wersje do repozytorium wydań mojego Nexusa. Nie wszystkie z tych zależności są wewnętrzne, więc nie mogę po prostu wydać na nich wszystkich.
W tym przykładzie other-1.2-SNAPSHOT
stanie się czymś takim, jak other-1.2-mine-1.2.3
, a thing-3.1-SNAPSHOT
stanie się thing-3.1-mine-1.2.3
. Jest to względnie banalne w około 60 liniach pythona.
Problem polega jednak na rozwiązywaniu przechodniów SNAPSHOT w konkretnych wersjach. Muszę więc również przekonwertować gizmo-6.1.3-SNAPSHOT
na gizmo-6.1.3-mine.1.2.3
i mieć na nim zależność thing-3.1-mine-1.2.3
.
To tylko przykład jednego ze sposobów osiągnięcia tego, co chcę. Celem jest to, że za rok lub dwa w dół drogi mogę sprawdzić moją gałąź wydania dla wersji 1.2.3 i być w stanie uruchomić mvn clean package
lub coś podobnego bez obawy o rozwiązanie od dawna nieistniejących zależności SNAPSHOT.
Ważne jest, aby ta gałąź była kompilowalna, a nie tylko zachowywać wszystkie zależności przy użyciu funkcji takiej jak jar-and-dependencies
funkcjonalności wtyczki zespołu. Chciałbym potencjalnie móc modyfikować pliki źródłowe i tworzyć kolejną wersję wydania (np. Zastosować poprawkę).
Więc
- Czy istnieje coś takiego, że dostępny będzie w stanie przerobić zależności zrzutu rekurencyjnej modą być beton?
- Czy są jakieś wtyczki, które zarządzają takimi rzeczami? Wtyczka wydania miała obietnicę z niektórymi opcjami konfiguracyjnymi na jej celu:
branch
, ale nie rozwiązuje zewnętrznych zależności do tego, czego chcę. - Czy są dostępne inne techniki tworzenia hermetycznych buildów Maven?
Brzmi jak anty Maven włamać się do mnie. W Maven jedną z podstawowych zasad jest ** Konwencja nad konfiguracją **. Jeśli zależności są tworzone samodzielnie, należy samodzielnie zarządzać/używać wersji SNAPSHOT/RELEASE. Jeśli pochodzą z innego miejsca, zawsze powinieneś używać najnowszej wersji (nie wersji SNAPSHOT). Spójrz ponownie w [Maven The Complete Reference - sekcja 3.3.1] (http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-pom-syntax.html#pom-reationships -sect-versions) i zobacz, dlaczego SNAPSHOT jest używany w Maven. – yorkw
Bardzo dokładnie rozumiem podstawy Mavena. Jednak żyję w realnym świecie z terminami i bibliotekami stron trzecich, które są niezwykle użyteczne, a mimo to siedzą w wersjach SNAPSHOT przez dłuższy czas. Jason Van Zyl, ktoś, kogo możesz znać, przyznaje nawet, że system o dużym obciążeniu procesowym wokół wydania był wielkim błędem (i zmienia się wraz z teslą). Bez utrzymywania wewnętrznych widelców całego projektu, który konsumujemy, to co robię jest w rzeczywistości skokowo lepszy niż większość ludzi. –
nawet w świecie rzeczywistym należy wziąć pod uwagę pewien powód. Walczysz tutaj z systemem. Jak już wspomniałeś Migawki nie żyją wystarczająco długo - nawet jeśli używasz znaczników czasu, aby polegać na rozdzielczości artefaktów. Moje podejście polegałoby na używaniu zależności i wdrażaniu wtyczek w celu pobrania wszystkich artefaktów i wdrożenia znanych zależności migawki do własnego repozytorium maven poprzez użycie skryptu lub wtyczki self-made-maven. Pomóc może też rozmowa z innymi gadżetami: jeśli mogą wypuszczać wersję beta swoich artefaktów, możesz polegać na tych, którzy nie mają zbyt wiele problemów. – wemu