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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top