Patrzę na restrukturyzację dużego projektu Maven ...Maven rada dotycząca wersjonowanie dużego projektu oraz unikania wersjach zawierających wyrażenia
Podstawowy przegląd naszej obecnej strukturze:
build [MVN plugins, third party dependency management]:5.1
NRW Utils:6.0.0.0-beta12-SNAPSHOT
server-utils:6.0.0.0-beta12-SNAPSHOT
...
CMW Root:6.0.0.0-beta12-SNAPSHOT
cmw-webapp:6.0.0.0-beta12-SNAPSHOT
cmw-core [dependencies on NRW Utils]:6.0.0.0-beta12-SNAPSHOT
...
NRW Root :6.0.0.0-beta12-SNAPSHOT
nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-beta12-SNAPSHOT
...
powodem zmiany:
wielkość każdego modułu zbiorowego (tj NRW Utils, CMW Korzeń Korzeń i NRW) jest coraz większe, a buil Proces ten zaczyna zajmować niewiarygodny czas (czasami około 4 godziny).
Nowy plan:
build [MVN plugins, third party dependency management]:5.1
NRW Utils:6.0.0.0-NU-beta4-SNAPSHOT
server-utils:6.0.0.0-NU-beta4-SNAPSHOT
...
CMW Root:6.0.0.0-CMW-beta12-SNAPSHOT
cmw-webapp:6.0.0.0-CMW-beta12-SNAPSHOT
cmw-core [dependencies on NRW Utils]:6.0.0.0-CMW-beta12-SNAPSHOT
...
NRW Root :6.0.0.0-NRW-beta9-SNAPSHOT
nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-NRW-beta9-SNAPSHOT
...
Rozpoczęliśmy wprowadzenie „klucze” w wersji do rozróżnienia pomiędzy różnymi modułami „zbiorowych” i stąd można łatwo wykonać schodkowe wydań. Ponadto nasze moduły narzędziowe są o wiele bardziej stabilne, więc nie musimy wymagać prawie tylu wersji beta - nie ma teraz żadnych ograniczeń dotyczących synchronizacji numerów wersji beta.
Warto również zauważyć, że w rzeczywistości istnieje 5 różnych "modułów zbiorczych" (nie tylko 3), które zostaną zbudowane w różnych wersjach (wyróżniających się unikatowymi klawiszami), dlatego pomyślałem, że byłoby miło mieć scentralizowane miejsce dla wersji, w przeciwieństwie do duplikatów właściwości w 5 różnych POM.
Problem polega obecnie na zawartości plików POM podczas definiowania zależności od modułów w innym "module zbiorczym" innej wersji.
Proponowane rozwiązanie do zarządzania zależnościami wersja:
build [MVN plugins, third party dependency management]:5.1
nrw-version-management:6.0.0.0-beta-SNAPSHOT
[contains properties defining latest versions of each collective module]
NRW Utils:6.0.0.0-NU-beta4-SNAPSHOT
server-utils:6.0.0.0-NU-beta4-SNAPSHOT
...
CMW Root:6.0.0.0-CMW-beta12-SNAPSHOT
cmw-webapp:6.0.0.0-CMW-beta12-SNAPSHOT
cmw-core [dependencies on NRW Utils]:6.0.0.0-CMW-beta12-SNAPSHOT
...
NRW Root :6.0.0.0-NRW-beta9-SNAPSHOT
nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-NRW-beta9-SNAPSHOT
...
NRW-version-zarządzanie (pom.xml):
...
<parent>
<groupId>com.project</groupId>
<artifactId>build</artifactId>
<version>5.1</version>
</parent>
<groupId>com.project</groupId>
<artifactId>nrw-versions-manager</artifactId>
<version>6.0.0.0-beta-SNAPSHOT</version>
<name>Version Maven Properties</name>
<description>A centralised place for all module property versions</description>
<packaging>pom</packaging>
<properties>
<nrw.utilities.version>6.0.0.0-NU-beta4-SNAPSHOT</nrw.utilities.version>
<nrw.cmw.version>6.0.0.0-CMW-beta12-SNAPSHOT</nrw.cmw.version>
<nrw.version>6.0.0.0-NRW-beta9-SNAPSHOT</nrw.version>
</properties>
...
CMW korzeni (pom.xml):
...
<parent>
<groupId>com.project</groupId>
<artifactId>nrw-versions-manager</artifactId>
<version>${nrw.core.version}</version>
...
</parent>
<groupId>com.project</groupId>
<artifactId>CMW-root</artifactId>
<version>6.0.0.0-CMW-beta12-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>server-utils</artifactId>
<version>${nrw.utilities.version}</version>
</dependency>
...
</dependencyManagement>
<profiles>
<profile>
<id>all</id>
<modules>
<module>cmw-webapp</module>
<module>cmw-core</module>
...
</modules>
</profile>
...
</profiles>
...
N.B. właściwość $ {nrw.core.version} zostanie wówczas ustawiona na 6.3.0.0-beta-SNAPSHOT dla budowania migawki za pomocą argumentów wiersza poleceń (lub domyślnej wartości właściwości).
Ewentualny proces uwalniania (dla 6.0.0.0):
- zbudować moduł 5.1 build jeśli nie jest już zbudowany
- Konstruowanie NRW-version-zarządzanie 6.0.0.0 (w celu uniknięcia zależności Snapshot - jednak nie ma właściwości są jeszcze zmienić)
- Budowa NRW Utils 6.0.0.0-NU cmd args: -Dnrw.core.version = 6.0.0.0
- Budowanie CMW głównej 6.0.0.0-CMW cmd args: -Dnrw. core.versi on = 6.0.0.0 -Dnrw.utilities.version = 6.0.0.0-NU
- Kompilacja NRW Root 6.0.0.0-NRW cmd args: -Dnrw.core.version = 6.0.0.0 -Dnrw.utilities.version = 6.0 .0,0-NU -Dnrw.cmw.version = 6.0.0.0-CMW
- Ponowne utworzenie wersji-wersji-zarządzania 6.0.0.0 dla repozytorium cmd argumenty: -Dnrw.core.version = 6.0.0.0 -Dnrw.utilities.version = 6.0.0.0-NU -Dnrw.cmw. version = 6.0.0.0-CMW
- Budowa NRW-version-zarządzanie 6.1.0.0 beta-SNAPSHOT nowe wersje dev i aktualizacji pliku POM
problem:
proces kompilacji wydaje długowieczny, szczególnie związany z modułem zarządzania wersją-wersją. Również zacząłem widząc to ostrzeżenie:
„wersja” zawiera wyrażenie, ale powinny być stałym
A zrobiwszy kilka bada teraz rozumiem wyrażenia nie są zalecane przy tworzeniu wersji (przy określaniu POM rodzic)
- Warning on using project.parent.version as the version of a module in Maven 3
- Maven: property substitution not done for /project/version tag of pom?
- http://maven.40175.n5.nabble.com/Pom-Parent-Version-Properties-td124576.html
pytania:
- mogę po prostu zignorować to ostrzeżenie? Niektóre posty zaczynają sugerować, że dopuszczalne jest podanie macierzystych wersji POM za pomocą właściwości.
- Czy to ogólne podejście jest konwencjonalne? Lub wadliwy?
- Czy istnieją lepsze rozwiązania dotyczące restrukturyzacji tego rosnącego projektu?
Z góry dziękuję.
Dziękujemy za dane wejściowe. Powodem, dla którego oddalamy się od jednej wersji, jest to, że bez tego znacznie łatwiej będzie podzielić naszą kompilację na kawałki "bitesize", z dodatkową zaletą prostoty; nie musimy teraz budować wszystkiego ponownie, jeśli jeden moduł ma aktualizację. Czy masz więcej myśli/sposobów na to, ale w jednej wersji? Dzięki. –
Dostajesz kawałki bitesize, dzieląc się repozytorium dla swoich artefaktów. Trzeba oczywiście zbudować cały projekt, gdy aktualizujesz numer wersji, ale potem budujesz i wdrażasz tylko te moduły, na których został opracowany./oskar – lambda64
Hmmm - ale już korzystamy z repozytorium dla zbudowanych artefaktów.Pozostawienie kompilacji w jednej wersji nadal oznacza, że musimy zbudować projekt jako jeden, co pozostawia nam czasochłonny proces kompilacji (4 godziny). Plus nasze numery wersji zmieniają się często (kiedy tylko niektóre moduły to powodują). –