優れたスケーラブルなソリューションが見つからない問題:
特定のアーティファクトの複数のフレーバーを提供するプロジェクトがあります。これはマルチモジュールプロジェクトとして設定されており、現在3つのモジュールがあります。
- / flavour1_module
- / flavour2_module
- / flavour3_module
問題は、同じ方法でセットアップする必要がある別の50のプロジェクトがあるということです。つまり、3つのフレーバーを提供します。
検討したソリューション:
- すでに作成されたマルチモジュールプロジェクトを他のすべての50プロジェクトの親に変える
- 短所:それはうまくいきません。親のモジュールで保持されている命令は継承されないため、実行されません。
- maven-archetype-pluginを使用してマルチモジュールプロジェクトテンプレートを作成し、テンプレートに基づいて50個すべてのプロジェクトを作成します
- 短所: flavour4が必要な場合は、50個のプロジェクトすべてを手動で更新してflavour4_moduleを追加する(そしてそのコンテンツを複製する)必要があります。スケーラブルではありません。
- すべてのフレーバーの構成を単一のpomに埋め込み、プロファイルに基づいてそれらを有効または無効にします(つまり、モジュールを介した継承ではなく、プロファイルによる構成を使用します)。次に、50のプロジェクトを親としてそのプロジェクトに向けます。これにより、「インライン」モジュールが作成されます
- 短所:モジュールによって提供される独自のメカニズムをそのまま実装する必要があります。(たとえば、すべてのフレーバーを個別のディレクトリに構築します)。また、モジュールが提供する明確な分離も失われます。
それをうまく行う方法はありますか?他に選択肢はありますか?
ありがとう、Lukasz
編集:
もう1つのオプションは、maven-reactor-pluginをreactor:inject-modulesゴールで拡張することです。これにより、外部アーティファクトからモジュール定義がダウンロードされ、その定義が通常のモジュールとしてアタッチされます。これにより、その場で新しいモジュールが作成されます。次に、50のプロジェクトすべてがこのpom.xmlを親にすることができます。
構成は次のようになります(ドラフト):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-reactor-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>inject</id>
<phase>initialize</phase>
<goals>
<goal>inject-modules</goal>
</goals>
<configuration>
<modules>
<module>
<artifactId>flavour1_module</artifactId>
<groupId>[ groupId ]</groupId>
<version>[ version ]</version>
</module>
<module>
<artifactId>flavour2_module</artifactId>
<groupId>[ groupId ]</groupId>
<version>[ version ]</version>
</module>
<module>
<artifactId>flavour3_module</artifactId>
<groupId>[ groupId ]</groupId>
<version>[ version ]</version>
</module>
</modules>
</configuration>
</execution>
</executions>
</plugin>
このように行くのは理にかなっていますか?
アップデート:
実行するモジュールのリストを操作するプラグイン(上記で説明したモジュールインジェクションのアイデア)を作成することは、モジュールがMavenコアによって処理され、メカニズムが拡張されるように設計されていないため、実装できないようです。プラグイン。これは、同様の仕事をする両方のプラグイン、つまり実行するプロジェクトのリストを操作するという事実によって確認されます。
システムコールを実行してMaven子プロセスを作成することでトリックを実行します。それは非常に不安定な解決策であるため、私にとってはそれは進むべき道ではありません。実際、maven-reactor-pluginはMaven3と互換性がなくなりました。
maven-invoker-pluginはまだ有望に見えます。プラグインは元々統合テストを実行するように設計されていましたが、コンパイルフェーズなどを拡張するために使用することも可能です。ただし、子pom.xml-sをリソースとして扱い、その場で変更する必要があります。ここで説明した問題の場合、解決策は複雑すぎて不安定になります。Mavenモデルを構築している間、メモリ内で動作できるより軽いものが好きです。
そのため、今のところ、プロファイルを使用して、可能な限りコンパクトにしようとしています。おそらくしばらくすると、問題についてもう一度考える必要があります。