5

次のMavenプロジェクトを設定しました。

  • PMコア
  • PM-Web(PM-Coreに依存)
現在、このプロジェクトは複数のクライアントで使用されていますが、クライアントごとにいくつかの小さな違いがあります。主に構成ファイルの違いですが、一部のクライアントでは追加のJavaファイルも必要です(他のクライアントにはインストールされない場合があります)。

私はこれをMavenでサポートする方法についていくつかの代替案を検討してきましたが、それでも完璧な解決策を探しています。

私が考えることができる最善の解決策は、クライアントごとに個別のMavenプロジェクト(PM-CLIENT1、...など)を作成することです。このプロジェクトには、クライアント固有の構成ファイルと追加のJavaファイルまたはjsp、...のみが含まれます。次のステップは、PM-Webプロジェクトとクライアントプロジェクトを1つのWebプロジェクトと見なすことです。つまり、PM-Webプロジェクトのファイルよりもクライアントプロジェクトのファイルが優先される1つのwarファイルに結合(パッケージ化)します。

より具体的mvn packageには、PM-Client1で実行すると、PM-Webからすべてが取得され、PM-Client1からファイルが追加/置換されてから、これが1つの戦争にパッケージ化されます。

したがって、問題は、Mavenでこれをどのように達成するかということです。

4

3 に答える 3

4

はい、これはオーバーレイを使用して実行できます。ウェブページのサンプルはまさにあなたが話しているものです。

プロジェクト構造の場合、次のようになります。

。
|-PM-コア
|-PM-WebCommon(タイプwar、コアに依存)
|-PM-Client1(タイプwar、webcommonに依存)
`-PM-Client2(タイプwar、webcommonに依存)

また、PM-Client1とPM-Client2のオーバーレイを使用して、PM-WebCommonと「マージ」し、各クライアントのwarをパッケージ化します。

更新すべての詳細をカバーすることはしませんが、オーバーレイを使用する場合は、タイプのスコープで戦争依存関係を宣言するruntime必要があると思います。これがオーバーレイの動作方法です(実際、オーバーレイ全体は一種のハックです)。ここで、Eclipseの問題を解決するための解決策のひとつは、PM-WebCommonプロジェクトのクラスを含むJARを作成することです。これを行うには、 attachClassesオプションのパラメーターを使用して、に設定しtrueます。PM-WebCommon-<version>-classes.jarこれにより、Mavenに、PM-Client1(providedスコープを使用)で依存関係として宣言できるようにするを作成するように指示されます。詳細については、MWAR-73およびMWAR-131をご覧ください。これはFAQでも説明されています戦争プラグインの。これは推奨される方法ではないことに注意してください。正しい方法は、クラスを別のモジュールに移動することです(これは、私が言及したかったもう1つの解決策です)。

更新(201001018):パラメーターを試しましたattachClassesが、プラグインのバージョン2.1-beta-1で動作します。

于 2010-01-14T14:04:12.087 に答える
1

プロファイルを使用してhttp://maven.apache.org/guides/mini/guide-building-for-different-environments.htmlを参照し、分類子を使用して、同じバージョンの異なるビルドからのアーティファクトを区別することができます。このセットアップでは、親プロジェクトの下でクライアント固有のカスタマイズごとに追加のオプションモジュールを作成できます。つまり、
+ PM
++ PM-Core
++ PM-Web
++ PM-Client1
++ PM-Client2

または、 Mavenアセンブリプラグインを使用して使用することを検討できます

于 2010-01-14T13:42:04.127 に答える
1

さまざまなWARファイル、共有リソースに関する質問の回答も比較してください。

于 2010-01-14T16:32:52.920 に答える