メイビン:Web プロジェクトを結合する
-
20-09-2019 - |
質問
次の Maven プロジェクトをセットアップしました。
- PMコア
- PM-Web (PM-Core への依存関係あり)
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
また、問題の異なるWARファイル、共有リソースの答えを比較してください。