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?

È stato utile?

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

[INFO] --- pitest-Maven: 1.1.3: mutationCoverage (default-CLI) @ Modulo di selenio --- [INFO] progetto Skipping

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top