W niektórych środowiskach musimy mieć możliwość pominięcia modułu podrzędnego.
Przedmiotowy moduł zawiera testy integracyjne i trwa pół godziny. Dlatego chcemy uwzględnić go podczas budowania na serwerze CI, ale gdy programiści budują lokalnie (a testy są uruchamiane), chcemy pominąć ten moduł.
Czy można to zrobić za pomocą ustawienia profilu? Zrobiłem trochę google i spojrzałem na inne pytania / odpowiedzi tutaj i nie znalazłem dobrego rozwiązania.
Przypuszczam, że jedną z opcji jest pom.xml
całkowite usunięcie tego modułu podrzędnego z modułu nadrzędnego i po prostu dodanie innego projektu na naszym serwerze CI, aby po prostu zbudować ten moduł.
Propozycje?
maven
continuous-integration
jenkins
denishaskin
źródło
źródło
Odpowiedzi:
Oczywiście, można to zrobić za pomocą profili. Możesz zrobić coś podobnego do poniższego w swoim nadrzędnym pom.xml.
W swoim CI uruchomiłbyś maven z
ci
profilem, tjmvn -P ci clean install
źródło
activeByDefault
do tego profilu, a następnie musiałem dodać kolejny pusty profil (np.skip-integration-tests
), Aby móc je pominąć.Maven w wersji 3.2.1 dodał tę funkcję, możesz użyć
-pl
przełącznika ( skrótu do--projects
listy) z!
lub-
( źródło ), aby wykluczyć niektóre podmoduły.Uważaj w walce z postacią! jest znakiem specjalnym, więc musisz go zacytować pojedynczo (tak jak ja) lub uciec od znaku odwrotnego ukośnika.
Składnia wykluczania wielu modułów jest taka sama jak w przypadku włączenia
EDYCJA Windows nie lubi pojedynczych cudzysłowów, ale jest to konieczne w bash; w systemie Windows użyj podwójnych cudzysłowów (dzięki @awilkinson)
źródło
mvn -pl !com.acme:nestedmodule1
mvn -pl '!path/to/submodule/directory'
, bez używania groupId i artifactId. Moja odpowiedź działa, jeślisubmodule1
isubmodule2
znajdują się w bieżącym katalogu.-pl
zmvn install
, prawdopodobnie będziesz musiał użyć gomvn deploy
jako dobrzeMożna zdecydować, które projekty reaktora zbudować, podając
-pl
argument wiersza poleceń:Przyjmuje listę parametrów oddzielonych przecinkami w jednej z następujących form:
[groupId]:artifactId
Zatem biorąc pod uwagę następującą strukturę:
Możesz określić następujący wiersz poleceń:
zbudować wszystko. Usuń elementy z listy, aby zbudować tylko te moduły, które Ci odpowiadają.
EDYCJA: jak wskazał blackbuild , od Maven 3.2.1 masz nową
-el
flagę, która wyklucza projekty z reaktora, podobnie do tego, co-pl
robi:źródło
mvn install -pl .
, aby zainstalować pom-matkę tylko w lokalnym repozytorium bez modułów budowlanych.Pojęcie projektów wielomodułowych ma na celu zaspokojenie potrzeb współzależnych segmentów projektu. Taki klient jest zależny od usług, które z kolei zależą od, powiedzmy, EJB lub procedur dostępu do danych. W ten sposób można pogrupować testy ciągłej integracji (CI). Zracjonalizowałbym to, mówiąc, że testy CI muszą być na bieżąco ze zmianami logiki aplikacji.
Załóżmy, że struktura Twojego projektu jest następująca:
Te
project-root/pom.xml
moduły DefiniujeTe
ci/pom.xml
profile definiuje takie jak:Spowoduje to, że Maven pominie testy w tym module, z wyjątkiem sytuacji, gdy nazwany profil
CI
jest aktywny. Twój serwer CI musi mieć polecenie wykonaniamvn clean package -P CI
. Witryna internetowa Maven zawiera szczegółowe wyjaśnienie mechanizmu profilowania .źródło
jest teraz (od wersji 1.1.1) flaga 'pomiń' w pit.
Możesz więc robić takie rzeczy, jak:
w twoim module, a pit przeskoczy
[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-selenium --- [INFO] Pomijanie projektu
źródło