Obecnie pracuję nad optymalizacją maven kompilacji wielomodułowego projektu maven. Projekt składa się z około 90 modułów Maven. W ogóle są jakieś libs przekrojowe tworzące rdzeń i wtedy istnieje około 15 „moduły aplikacji” składające się na całą aplikację (który jest następnie wdrożony jak w wojnie)Tworzenie niezależnych modułów z wieloma modułami i wydawanie pojedynczych modułów?
Teraz w ogóle cały projekt ma główna wersja "2.5", więc po wydaniu nowej głównej wersji wszystkie "moduły aplikacji" mają tę samą wersję "2.5.0". Jak na razie dobrze.
Jeśli moduł ma błąd, który należy naprawić lub wymaga naprawy, powinna zostać wydana nowa wersja tego "modułu aplikacji". Na przykład moduł A ma naprawiony błąd, a następnie A.jar powinien być w wersji "2.5.1", podczas gdy reszta powinna nadal być "2.5.0".
nadrzędny (2.5.0-SNAPSHOT - Moduł A (2.5.1-tło) - moduł B (2.5.0-tło) - moduł C (2.5.2-tło) - War (2.5. 3-SNAPSHOT) < - 3 na końcu, ponieważ C miał 2 ponowne wydania i jedną i został wydany po każdym wydaniu modułu dla uproszczenia
Postanowiliśmy zarządzać wersjami artefaktów w master pom, więc nie po zwolnieniu jednego modułu trzeba zaktualizować wersje zależności każdego artefaktu:
Tak więc, gdy tylko zaktualizowany "moduł aplikacji" jest gotowy, używamy klucza zwolnij plugin, aby wykonać wydanie tego modułu (Wydajemy jeden moduł, a nie cały projekt). Powiedzmy, że zwalniamy moduł A w wersji 2.5.4, w wyniku czego A.jar jest wdrażany jako wersja 2.5.4 i kończy się aktualizacją kodu modułu do wersji 2.5.5-SNAPSHOT.
Po wykonaniu tej czynności należy zaktualizować wersję w master pom, aby wszystkie moduły nadal odwoływały się do odpowiedniej wersji.
Dzięki sekcji dependencyManagement z pom nadrzędnego, jeśli zbudować moduł wojnie, to automatycznie pobierze nową wersję modułu A.
Teraz najtrudniejsze: Jak tylko wszystkie moduły są zwolnione, nowa wersja aplikacji internetowej powinna zostać wydana. Powinno to zawierać wszystkie niezmienione moduły, a także te, które zostały właśnie wydane. Obecnie walczę, jak to zrobić. Jeśli będę zależał od macierzystej wersji poms, wydanie będzie zawierało wersje SNAPSHOT (wszystkie przyrosty jednej wersji zbyt wysokie), których ja i wtyczka wydania nie akceptujemy.
Jakie byłoby najlepsze rozwiązanie tego dylematu?
Miałem jeden pomysł, aby wyeksportować zarządzanie zależnościami do osobnej pompy pom, która jest następnie importowana do modułu zarządzania zależnością master poms za pomocą zakresu "import".
Czy ten rodzaj szenario jest głupim pomysłem? Czy istnieją alternatywy dla opracowania i utrzymania dużej wielomodułowej aplikacji takiej jak ta? Po prostu posiadanie wszystkich wersji zsynchronizowanych i używanie wtyczki wydania w całym projekcie nie jest opcją, ponieważ aplikacja jest duża, a aplikacje klienckie muszą ładować zaktualizowane wersje modułów. Niektórzy z naszych klientów mają bardzo powolne połączenia, więc za każdym razem rozwijanie wszystkich modułów czyni ich naprawdę nieszczęśliwymi.
Pomoc mile widziana,
Chris
Hi noahz, Dzięki za to wyjaśnienie to pomogło. Zdałem sobie sprawę, że to zadziała, jeśli moje moduły nie będą ze sobą powiązane. Unfortunetaley oni robią. Miałem inne wyobrażenie o tym, jak można rozwiązać ten problem i stworzyłem z nim nową odpowiedź (można w ten sposób napisać tekst ;-)) –