In bestimmten Umgebungen muss ein Submodul übersprungen werden können.
Das betreffende Modul enthält Integrationstests und dauert eine halbe Stunde. Wir möchten es also beim Erstellen auf dem CI-Server einbeziehen, aber wenn Entwickler lokal erstellen (und Tests ausgeführt werden), möchten wir dieses Modul überspringen.
Gibt es eine Möglichkeit, dies mit einer Profileinstellung zu tun? Ich habe ein bisschen gegoogelt und mir die anderen Fragen / Antworten hier angesehen und keine gute Lösung gefunden.
Ich nehme an, eine Option besteht darin, dieses Submodul pom.xml
vollständig aus dem übergeordneten Modul zu entfernen und einfach ein weiteres Projekt auf unserem CI-Server hinzuzufügen, um nur dieses Modul zu erstellen.
Vorschläge?
maven
continuous-integration
jenkins
Denishaskin
quelle
quelle
Antworten:
Sicher, dies kann mit Profilen erfolgen. In der übergeordneten Datei pom.xml können Sie Folgendes tun.
In Ihrem CI würden Sie maven mit dem
ci
Profil ausführen , dhmvn -P ci clean install
quelle
activeByDefault
diesem Profil hinzugefügt habe und dann ein weiteres leeres Profil (z. B.skip-integration-tests
) hinzufügen musste, um sie überspringen zu können.Maven Version 3.2.1 hat diese Funktion hinzugefügt. Sie können den
-pl
Schalter ( Verknüpfung für--projects
Liste) mit!
oder-
( Quelle ) verwenden, um bestimmte Submodule auszuschließen.Sei vorsichtig, wenn du den Charakter schlägst! ist ein Sonderzeichen, daher müssen Sie es entweder in einfache Anführungszeichen setzen (wie ich) oder es mit dem Backslash-Zeichen maskieren.
Die Syntax zum Ausschließen mehrerer Module entspricht der Einbeziehung
BEARBEITEN Windows scheint die einfachen Anführungszeichen nicht zu mögen, aber es ist in bash notwendig; Verwenden Sie in Windows doppelte Anführungszeichen (danke @awilkinson)
quelle
mvn -pl !com.acme:nestedmodule1
mvn -pl '!path/to/submodule/directory'
ohne groupId und artefaktId verwenden. Meine Antwort funktioniert, wennsubmodule1
undsubmodule2
sich im aktuellen Verzeichnis befinden.-pl
inmvn install
, Sie werden es wahrscheinlich verwenden müssenmvn deploy
auchSie können entscheiden, welche Reaktorprojekte erstellt werden sollen, indem Sie das
-pl
Befehlszeilenargument angeben:Es akzeptiert eine durch Kommas getrennte Liste von Parametern in einer der folgenden Formen:
[groupId]:artifactId
Somit ergibt sich folgende Struktur:
Sie können die folgende Befehlszeile angeben:
alles bauen. Entfernen Sie die Elemente in der Liste, um nur die gewünschten Module zu erstellen.
BEARBEITEN : Wie Blackbuild hervorhob , haben Sie ab Maven 3.2.1 eine neue
-el
Flagge , die Projekte aus dem Reaktor ausschließt, ähnlich-pl
wie:quelle
mvn install -pl .
, um übergeordnete POM nur in lokalen Repo zu installieren, ohne Module zu erstellen.Der Begriff der Projekte mit mehreren Modulen dient dazu, die Anforderungen von codependenten Segmenten eines Projekts zu erfüllen. Ein solcher Client hängt von den Diensten ab, die wiederum beispielsweise von EJBs oder Datenzugriffsroutinen abhängen. Du könntest Gruppe Ihre kontinuierliche Integration (CI) Tests auf diese Weise. Ich würde das rationalisieren, indem ich sage, dass die CI-Tests mit Änderungen der Anwendungslogik Schritt halten müssen.
Angenommen, Ihr Projekt ist wie folgt strukturiert:
Das
project-root/pom.xml
definiert ModuleDas
ci/pom.xml
definiert Profile wie:Dies führt dazu, dass Maven in diesem Modul Tests überspringt, es sei denn, das genannte Profil
CI
ist aktiv. Ihr CI-Server muss zur Ausführung angewiesen werdenmvn clean package -P CI
. Auf der Maven-Website wird der Profilierungsmechanismus ausführlich erläutert .quelle
Es gibt jetzt (ab Version 1.1.1) eine "Überspringen" -Flagge in der Grube.
So können Sie Dinge tun wie:
in Ihrem Modul, und Grube wird überspringen
[INFO] --- pitest-maven: 1.1.3: mutationsCoverage (default-cli) @ module-selenium --- [INFO] Projekt überspringen
quelle