これは簡単だと思いましたが、問題があります:
- Project1 のタイプは war です。これにより、一部の Apache モジュール (solr/lucene) と一部のカスタム コードを含む webapp .war ファイル全体が作成されます。
- Project2 は既存のアプリケーションです。Project1 の war ファイルに対してクエリを実行するには、組み込みの Jetty を起動する必要があります。(以下のコードを参照)
主な問題:
- Project2 が Jetty をインスタンス化するとき、WAR ファイルへのフル パスを渡す必要がありますが、これは毎回変更されます。Maven は Project1 の war ファイルにバージョン番号を追加します。
レスキューへのアセンブリ?
- カスタム アセンブリを機能させることはできますが、Project1 からバージョン管理スタンプを取り除くことができません。
しかし、私はいつも Project1-1.4.1-20120530.233546-2.war で終わります。もっと便利な場所にありますが、名前はまだ変です。
Project2 の Jetty コード:
// Context
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
String jettyHome = System.getProperty( "jetty.home", ".." );
String fullWarName = ...; // Project1's WAR file. This path always changes
webapp.setWar( fullWarName );
// Server
Server server = new Server( kPort ); // TODO: get from config
server.setHandler(webapp);
server.start();
server.join();
その他の考慮事項:
- maven-jetty プラグインがあることは認識していますが、ここでは適切ではないと思います。単体テストを対象としているようです。また、アプリケーション スタックは実行時に Maven を使用してサービスを起動しません。
- また、Solr には Web コンテナーを必要としない完全に組み込まれたバージョンがあることも認識していますが、これはしばらく非推奨であり、使用するのはお勧めできません。
このプロジェクトをリファクタリングするより良い方法はありますか? 多分これは「メイヴン・ウェイ」ではないでしょうか?