Question

Nous avons besoin de pouvoir sauter un sous-module dans certains environnements.

Le module en question contient des tests d'intégration et prend une demi-heure à courir. Nous voulons donc l'inclure lors de la construction sur le serveur de CI, mais quand les développeurs à créer localement (et les tests pour la course), nous voulons ignorer ce module.

Est-il possible de le faire avec un paramètre de profil? Je l'ai fait googling et regardé les autres questions / réponses ici et n'ai pas trouvé une bonne solution.

Je suppose que d'une option est de supprimer cette sous-module de la pom.xml mère tout à fait, et juste ajouter un autre projet sur notre serveur de CI à construire juste ce module.

Suggestions?

Était-ce utile?

La solution

Bien sûr, cela peut être fait en utilisant des profils. Vous pouvez faire quelque chose comme ce qui suit dans votre pom.xml parent.

  ...
   <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>
 ...

Dans votre CI, vous courrais maven avec le profil de ci, à savoir mvn -P ci clean install

Autres conseils

Version Maven 3.2.1 a ajouté cette fonctionnalité, vous pouvez utiliser le commutateur -pl ( raccourci pour la liste --projects) avec ! ou - ( la source ) pour exclure certains sous-modules.

mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install

Soyez prudent dans bash le caractère! est un caractère spécial, vous avez soit guillemet simple, il (comme je l'ai fait) ou de l'évasion avec le caractère anti-slash.

La syntaxe pour exclure le module multiple est le même que l'inclusion

mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install

EDIT Windows ne semble pas comme les guillemets simples, mais il est nécessaire bash; dans Windows, utilisez des guillemets doubles (@awilkinson merci)

mvn -pl "!submodule1,!submodule2" install

Il est possible de décider quels projets réacteur à construire en spécifiant l'argument de ligne de commande -pl:

$ mvn --help
[...]
 -pl,--projects <arg>                   Build specified reactor projects
                                        instead of all projects
[...]

Il accepte une liste séparée par des virgules des paramètres dans l'une des formes suivantes:

  • chemin relatif du dossier contenant le POM
  • [groupId]:artifactId

Ainsi, compte tenu de la structure suivante:

project-root [com.mycorp:parent]
  |
  + --- server [com.mycorp:server]
  |       |
  |       + --- orm [com.mycorp.server:orm]
  |
  + --- client [com.mycorp:client]

Vous pouvez spécifier la ligne de commande suivante:

mvn -pl .,server,:client,com.mycorp.server:orm clean install

pour tout construire. Supprimer des éléments dans la liste pour ne construire que les modules que vous s'il vous plaît.


EDIT: comme blackbuild a souligné, dans Maven 3.2.1 vous avez un nouveau drapeau -el qui exclut les projets du réacteur, similaire à ce qui fait -pl:

La notion de projets multi-module est là pour répondre aux besoins des segments de codépendance d'un projet. client Un tel dépend des services qui dépendent à leur tour EJB dire ou routines d'accès aux données. Vous peut groupe vos tests d'intégration continue (CI) de cette manière. Je rationaliseraient en disant que les tests de CI doivent être en lock-étape avec des changements logiques d'application.

Supposons que votre projet est structuré comme:

project-root
  |
  + --- ci
  |
  + --- client
  |
  + --- server

Le project-root/pom.xml définit modules

<modules>
  <module>ci</module>
  <module>client</module>
  <module>server</module>
</modules>

Les profils définit des ci/pom.xml tels que:

... 
<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>

Cela se traduira par des tests sauter Maven dans ce module, sauf lorsque le profil nommé CI est actif. Votre serveur CI doit être chargé d'exécuter mvn clean package -P CI. Le site Web Maven a explication approfondie du mécanisme de profilage .

il est maintenant (de 1.1.1 Version) un drapeau 'sauter' dans le puits.

Vous pouvez faire des choses comme:

    <profile>
        <id>pit</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.pitest</groupId>
                    <artifactId>pitest-maven</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

dans votre module, et la fosse sautera

[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module sélénium --- [INFO] projet Skipping

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top