特定の環境ではサブモジュールをスキップできる必要があります。
問題のモジュールには統合テストが含まれており、実行に30分かかります。したがって、CIサーバー上でビルドするときにそれを組み込みたいのですが、開発者がローカルでビルドする(そしてテストを実行する)ときは、そのモジュールをスキップします。
プロファイル設定でこれを行う方法はありますか?私はいくつかのグーグルを行ったが、ここで他の質問/回答を見たが、良い解決策を見つけられなかった。
1つのオプションは、そのサブモジュールを親pom.xml
から完全に削除し、CIサーバーに別のプロジェクトを追加してそのモジュールをビルドするだけだと思います。
提案?
もちろん、これはプロファイルを使用して実行できます。親pom.xmlで次のようなことができます。
...
<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>
...
CIでは、ci
プロファイル、つまりmvn -P ci clean install
でmavenを実行します
Mavenバージョン3.2.1はこの機能を追加しました。-pl
スイッチ( ショートカット for --projects
リスト)を!
または-
(- source )特定のサブモジュールを除外します。
mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install
キャラクターをバッシュする際には注意してください!は特殊文字なので、単一引用符で囲む必要があります(私がしたように)か、バックスラッシュ文字でエスケープする必要があります。
複数のモジュールを除外する構文は、インクルードと同じです
mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install
EDITWindowsは一重引用符を好まないようですが、bashでは必要です。 Windowsでは、二重引用符を使用します(@awilkinsonに感謝)
mvn -pl "!submodule1,!submodule2" install
-pl
コマンドライン引数を指定することにより、どのリアクタプロジェクトをビルドするかを決定することが可能です:
$ mvn --help
[...]
-pl,--projects <arg> Build specified reactor projects
instead of all projects
[...]
次のいずれかの形式のパラメーターのコンマ区切りリストを受け入れます。
[groupId]:artifactId
したがって、次の構造が与えられます。
project-root [com.mycorp:parent]
|
+ --- server [com.mycorp:server]
| |
| + --- orm [com.mycorp.server:orm]
|
+ --- client [com.mycorp:client]
次のコマンドラインを指定できます。
mvn -pl .,server,:client,com.mycorp.server:orm clean install
すべてを構築します。リスト内の要素を削除して、必要なモジュールのみをビルドします。
編集: blackbuild が指摘したように、Maven 3.2.1の時点で 新しい-el
フラグがあります これは、-pl
が行うことと同様に、リアクターからプロジェクトを除外します。
マルチモジュールプロジェクトの概念は、プロジェクトの相互依存セグメントのニーズに対応するためのものです。このようなクライアントは、EJBやデータアクセスルーチンなどに依存するサービスに依存します。 couldこの方法で継続的インテグレーション(CI)テストをグループ化します。 CIのテストは、アプリケーションロジックの変更に対応する必要があると言って、それを合理化します。
プロジェクトが次のように構成されているとします:
project-root
|
+ --- ci
|
+ --- client
|
+ --- server
project-root/pom.xml
はモジュールを定義します
<modules>
<module>ci</module>
<module>client</module>
<module>server</module>
</modules>
ci/pom.xml
は、次のようなプロファイルを定義します。
...
<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>
これにより、CI
という名前のプロファイルがアクティブな場合を除き、Mavenはこのモジュールのテストをスキップします。 CIサーバーにmvn clean package -P CI
を実行するように指示する必要があります。 Maven Webサイトには プロファイリングメカニズムの詳細な説明 があります。
現在(1.1.1バージョンから)ピットに「スキップ」フラグがあります。
したがって、次のようなことができます:
<profile>
<id>pit</id>
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
あなたのモジュールで、ピットはスキップします
[情報] --- pitest-maven:1.1.3:mutationCoverage(default-cli)@ module-Selenium --- [情報]プロジェクトをスキップしています