Mamy projekt Maven 2 z wieloma modułami. Przykład:
<modules>
<module>common</module>
<module>foo</module>
<module>data</module>
<module>bar</module>
... more ...
</module>
Załóżmy, że tworzenie modułu danych jest czasochłonne i chcemy go wykluczyć, gdy projekt jest budowany przez serwer CI. Obecnie używamy do tego dwóch plików pom.xml. Jeden zawiera wszystkie moduły, a drugi ma wszystkie moduły oprócz tych, które można pominąć dla CI. Ale to dość denerwujące, ponieważ czasami zapominamy o umieszczeniu nowego modułu w obu plikach.
Czy istnieje rozwiązanie, które nie wymaga dwóch oddzielnych list modułów?
Dzięki Maven 3.2.1 możesz teraz użyć,
-pl !<module_name>,!<module_name>
aby wykluczyć niektóre moduły z kompilacji reaktora.Zobacz tę prośbę o funkcję: https://issues.apache.org/jira/browse/MNG-5230
źródło
-
zamiast!
, np.-pl -<module_name>
Projekty do zbudowania można również określić w wierszu poleceń mvn. To wyeliminowałoby potrzebę oddzielnego pom, ale zamiast tego musiałbyś zmieniać konfigurację CI za każdym razem, gdy pojawia się nowy moduł.
Może połączenie tej flagi i
--also-make-dependents
lub--also-make
zmniejszyłoby to obciążenie związane z utrzymaniem.źródło
mvn clean install -pl mysubproject
Zakładam, że chcesz, aby domyślna kompilacja zawsze tworzyła wszystko, niezależnie od szybkości, aby nowi programiści mogli szybko rozpocząć pracę bez konieczności rozumienia POM. Możesz używać takich profili:
Problem polega na tym, że jeśli programista określi inny profil w wierszu poleceń, plik
expensive-modules-to-build
to nie jest on uwzględniany (chyba że programista również go określi). To sprawia, że zapamiętanie, które profile należy uwzględnić, jest skomplikowane.Oto hacky sposób obejścia tego. Oba profile są zawsze uwzględniane, ponieważ plik pom.xml zawsze istnieje. Aby wykluczyć drogie moduły, możesz użyć
-P!full-build
w wierszu poleceń.źródło
-pl !<module_name>,!<module_name>
jest lepsza niż ta staraInny pomysł: moduły Reactor można zagnieżdżać, więc powinno być możliwe zgrupowanie szybko i wolno budujących się modułów w oddzielne poms, a następnie dodanie kolejnego agregatora pom zawierającego te dwa jako moduły. Twój serwer CI mógłby wtedy odnosić się tylko do pom zawierającego moduły szybkiego budowania.
źródło
Możesz użyć profili maven . W naszym środowisku kompilacji stworzyliśmy profil,
quick
który wyłącza wiele wtyczek i wykonywanie testów.Odbywa się to przez
A potem wywołujemy maven w następujący sposób
Możesz wyłączyć kompilację i inne standardowe wtyczki w pomie swojego modułu, aby przyspieszyć ten proces.
źródło
Nie do końca odpowiedź, o którą prosili ci ludzie. Moja sytuacja była taka, że chciałem wdrożyć tylko macierzysty pom. Używam
spring-boot-thin-layout
w module podrzędnym. Wymaga to wdrożenia modułu nadrzędnego w artefaktorze. Dodałem do mojego projektu: Umożliwia pominięcieinstall
i / lubdeploy
fazę.W moim pompie rodzica:
A w moich podrzędnych pom (ach) lub dowolnym module, którego nie chcesz wdrożyć z rodzicem:
Tak więc efektywnie, gdy uruchomię
mvn deploy
na pom-nadrzędnym pom, skompiluje on wszystkie moduły, nie uruchomi instalacji na niczym, a na koniec wdroży każdy moduł, który nie ma<maven.deploy.skip>${disable.deploy}</maven.deploy.skip>
w swoich właściwościach. Więc w moim przypadku wdrażam tylko rodzica.źródło