質問

次の Maven プロジェクトをセットアップしました。

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

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

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

より具体的に:ランニング mvn package PM-Client1 では、PM-Web からすべてを取得し、PM-Client1 からファイルを追加/置換して、これを 1 つの war にパッケージ化します。

そこで質問は次のとおりです。Maven でこれを実現するにはどうすればよいですか?

役に立ちましたか?

解決

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

プロジェクト構造としては、次のようなものが考えられます。

.
|-- PM-Core
|-- PM-WebCommon (of type war, depends on core)
|-- PM-Client1 (of type war, depends on webcommon)
`-- PM-Client2 (of type war, depends on webcommon)

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

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

アップデート (201001018):試してみました attachClasses パラメータを指定すると、プラグインのバージョン 2.1-beta-1 で動作します。

他のヒント

あなたは見のプロファイルを使用することができます http://maven.apache.org/guides/ミニ/ガイド・建物用-異なる-environments.html 分類器を使用します。同じバージョンのビルドを異なるから成果物を区別します。 この設定では、すなわち
親プロジェクトの下で、あなたのクライアントのそれぞれの具体的なカスタマイゼーションのための追加オプションモジュールを作成することができます + PM
++ PM-コア
++ PM-ウェブ
++ PM-クライアント1
++ PM-クライアント2

それとも、<の Mavenのアセンブリのプラグインを使用して使用で見ることができます/ P>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top