Überspringen Sie ein Submodul während eines Maven -Builds
-
25-10-2019 - |
Frage
Wir müssen in bestimmten Umgebungen ein Submodul überspringen können.
Das fragliche Modul enthält Integrationstests und dauert eine halbe Stunde. Daher möchten wir es beim Erstellen auf dem CI -Server aufnehmen. Wenn Entwickler jedoch lokal erstellen (und Tests werden ausgeführt), möchten wir dieses Modul überspringen.
Gibt es eine Möglichkeit, dies mit einer Profileinstellung zu tun? Ich habe etwas Googeln gemacht und mir die anderen Fragen/Antworten hier angesehen und keine gute Lösung gefunden.
Ich nehme an, eine Option besteht darin, dieses Submodul vom Elternteil zu entfernen pom.xml
Ganz und fügen Sie einfach ein weiteres Projekt auf unserem CI -Server hinzu, um dieses Modul zu erstellen.
Anregungen?
Lösung
Sicher, dies kann mit Profilen erfolgen. Sie können so etwas wie Folgendes in Ihrem übergeordneten pom.xml machen.
...
<modules>
<module>module1</module>
<module>module2</module>
...
</modules>
...
<profiles>
<profile>
<id>ci</id>
<modules>
<module>module1</module>
<module>module2</module>
...
<module>module-integration-test</module>
</modules>
</profile>
</profiles>
...
In Ihrem CI würden Sie Maven mit dem laufen lassen ci
Profil, dh mvn -P ci clean install
Andere Tipps
Maven Version 3.2.1 hat diese Funktion hinzugefügt, Sie können die verwenden -pl
Schalter (Abkürzung zum --projects
Liste) mit !
oder -
(Quelle) bestimmte Submodule ausschließen.
mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install
Seien Sie vorsichtig, wenn Sie den Charakter verprügeln! ist ein besonderer Charakter, also musst du entweder ein einzelnes Zitat (wie ich) oder mit dem Backslash -Charakter entkommen.
Die Syntax zum Ausschluss mehrerer Modul ist der gleiche wie der Einschluss
mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install
BEARBEITEN Windows scheint die einzelnen Zitate nicht zu mögen, aber es ist in Bash notwendig; Verwenden Sie in Windows Doppelzitate (danke @awilkinson)
mvn -pl "!submodule1,!submodule2" install
Es ist möglich zu entscheiden, welche Reaktorprojekte erstellt werden sollen, indem Sie die angeben -pl
Befehlszeilenargument:
$ mvn --help
[...]
-pl,--projects <arg> Build specified reactor projects
instead of all projects
[...]
Es akzeptiert eine von Kommas getrennte Liste von Parametern in einer der folgenden Formulare:
- relativer Pfad des Ordners, der den POM enthält
[groupId]:artifactId
Daher angesichts der folgenden Struktur:
project-root [com.mycorp:parent]
|
+ --- server [com.mycorp:server]
| |
| + --- orm [com.mycorp.server:orm]
|
+ --- client [com.mycorp:client]
Sie können die folgende Befehlszeile angeben:
mvn -pl .,server,:client,com.mycorp.server:orm clean install
alles bauen. Entfernen Sie Elemente in der Liste, um nur die Module zu erstellen, die Sie möchten.
Bearbeiten: as Blackbuild wies auf Maven 3.2.1 darauf hin, dass Sie haben ein neuer -el
Flagge das schließt Projekte aus dem Reaktor aus, ähnlich wie was -pl
tut:
Der Begriff von Multi-Modul-Projekten besteht darin, die Bedürfnisse von Codependent-Segmenten eines Projekts zu bedienen. Ein solcher Kunde hängt von den Diensten ab, die wiederum von EJB- oder Datenzugriffsroutinen abhängt. Du könnte Gruppieren Sie Ihre kontinuierliche Integrationstests (CI) auf diese Weise. Ich würde rationalisieren, dass die CI-Tests mit Änderungen der Anwendungslogik in Schloss sein müssen.
Angenommen, Ihr Projekt ist strukturiert als:
project-root
|
+ --- ci
|
+ --- client
|
+ --- server
Das project-root/pom.xml
Definiert Module
<modules>
<module>ci</module>
<module>client</module>
<module>server</module>
</modules>
Das ci/pom.xml
definiert Profile wie:
...
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</profile>
<profile>
<id>CI</id>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</profile>
</profiles>
Dies führt dazu, dass Maven -Übersprungstests in diesem Modul, außer wenn das Profil benannt ist CI
ist aktiv. Ihr CI -Server muss angewiesen werden, auszuführen mvn clean package -P CI
. Die Maven -Website hat eine Eingehende Erklärung des Profilerstellungsmechanismus.
Es gibt jetzt (ab 1.1.1 Version) ein "Skip" -Flag in der Grube.
Sie können also Dinge wie:
<profile>
<id>pit</id>
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
In Ihrem Modul und Grube überspringen
Info] --- Pitest-Maven: 1.1.3: MutationCoverage (Standard-Cli) @ Modul-Selenium --- [Info] Projekt überspringen