Passa un modulo durante una generazione Maven
-
25-10-2019 - |
Domanda
Abbiamo bisogno di essere in grado di saltare un modulo in determinati ambienti.
Il modulo in questione contiene test di integrazione e impiega mezz'ora per corsa. Quindi vogliamo includerla quando si costruisce sul server CI, ma quando agli sviluppatori di creare a livello locale (e le prove ottengono pista), si consiglia di saltare quel modulo.
C'è un modo per fare questo con un ambiente profilo? Ho fatto qualche googling e guardato le altre domande / risposte qui e non ho trovato una buona soluzione.
Credo che una possibilità è quella di rimuovere quel modulo dal pom.xml
genitore del tutto, e basta aggiungere un altro progetto sul nostro server CI a poco costruire quel modulo.
Suggerimenti?
Soluzione
Certo, questo può essere fatto utilizzando i profili. Si può fare qualcosa di simile a quanto segue nel pom.xml genitore.
...
<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>
...
Nel vostro CI, si correrebbe Maven con il profilo ci
, vale a dire mvn -P ci clean install
Altri suggerimenti
Maven versione 3.2.1 aggiunto questa funzione, è possibile utilizzare l'opzione -pl
( scorciatoia per la lista --projects
) con !
o -
( fonte ) per escludere determinati moduli.
mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install
Fare attenzione in bash il carattere! è un carattere speciale, in modo da avere sia per singola citazione che (come ho fatto io) o fuggire con il carattere di backslash.
La sintassi di escludere modulo multiplo è la stessa come l'inclusione
mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install
Modifica di Windows non sembra come le virgolette singole, ma è necessario in bash; in Windows, utilizzare le virgolette doppie (grazie @awilkinson)
mvn -pl "!submodule1,!submodule2" install
E 'possibile decidere quali progetti per la costruzione del reattore specificando l'argomento della riga di comando -pl
:
$ mvn --help
[...]
-pl,--projects <arg> Build specified reactor projects
instead of all projects
[...]
Si accetta una virgola elenco di parametri separati in una delle seguenti forme:
- percorso relativo della cartella che contiene il POM
-
[groupId]:artifactId
Pertanto, data la seguente struttura:
project-root [com.mycorp:parent]
|
+ --- server [com.mycorp:server]
| |
| + --- orm [com.mycorp.server:orm]
|
+ --- client [com.mycorp:client]
È possibile specificare la seguente riga di comando:
mvn -pl .,server,:client,com.mycorp.server:orm clean install
Per costruire tutto. Rimuovere gli elementi della lista di costruire solo i moduli per favore.
EDIT: come blackbuild rilevare, come di Maven 3.2.1 si dispone di una nuova -el
bandiera che esclude i progetti dal reattore, analogamente a quanto fa -pl
:
La nozione di progetti multi-modulo è lì per soddisfare le esigenze di segmenti codependent di un progetto. Tale cliente un dipende dai servizi che a sua volta dipende da EJB dire o le routine di accesso ai dati. potrebbe di gruppo i tuoi integrazione continua (CI) test in questo modo. Vorrei razionalizzare che col dire che i test CI devono essere in lock-passo con i cambiamenti nella logica dell'applicazione.
Supponiamo che il vostro progetto è strutturato come:
project-root
|
+ --- ci
|
+ --- client
|
+ --- server
Il project-root/pom.xml
definisce moduli
<modules>
<module>ci</module>
<module>client</module>
<module>server</module>
</modules>
I definisce ci/pom.xml
profili come ad esempio:
...
<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>
Questo si tradurrà in Maven saltare i test di questo modulo, tranne quando il profilo denominato CI
è attivo.
Il server CI deve essere istruito per eseguire mvn clean package -P CI
. Il sito Maven ha un approfondita spiegazione del meccanismo di profilatura .
v'è ora (da 1.1.1 versione) una bandiera 'saltare' in pit.
Così si può fare cose come:
<profile>
<id>pit</id>
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
nel vostro modulo e pit salta ??p>
[INFO] --- pitest-Maven: 1.1.3: mutationCoverage (default-CLI) @ Modulo di selenio --- [INFO] progetto Skipping