2012-03-29 16 views
1

Mavenを使用して管理されるJavaアプリケーションがあります。このプロジェクトには、何かをする国の概念が含まれています。Springを使用したMavenビルドと依存性注入

public interface ICountry { 
    public void doSomething(); 
} 

public class England implements ICountry {...} 
public class Brazil implements ICountry {...} 

public class CountryApp { 
    public static void main (String args[]) { 

     ICountry country = null; 

     // PSEUDOCODE: 
     // Retrieve a chosen implementation of ICountry using Spring 

     country.doSomething(); 
    } 
} 

私がSpringを見たことから、各国ごとに1つのSpring構成ファイルが存在する可能性があります。 Maven profilesを使用して、プロファイル内の要素を使用して適切な構成ファイルを選択することができます。しかし、ドキュメンテーションは、プロファイルは、アプリケーションの異なる構成を持つのではなく、異なる環境でビルディングをサポートすることを意図していると述べています。

これは妥当なアプローチのようですか?誰かがより良い、またはより標準的な方法を知っている場合私に知らせてください:

EDIT:最終的に私は各国の.jarを作成することができます。例えば

  • myappの-england.jar、
  • myappの-brazil.jarなど
私は、このためのソリューションのカップルを見ることができます
+0

各国をテストしますか?あるいは、テスト環境が与えられた国を選択したいのですか? – YMomb

+0

どの「国」を使用すべきかはどのように決定していますか? DIを使って国を注入するのはちょっとおかしい。 – beerbajay

+0

ロケールはどうですか? – YMomb

答えて

3

...

あなたが終わるしたい場合国ごとに1つのJARファイルがある場合、正しい方法は国ごとに個別のMavenプロジェクトを作成することです。インターフェイスを定義する共通のプロジェクトを作成し、次に、実装クラス、依存関係としてのインターフェイスプロジェクト、必要な追加の機能または構成を含む国ごとのプロジェクトを作成します。このようにして、さまざまな実装をきれいに分けることができ、ビルドの設定について心配する必要はありません。新しい国を追加する場合は、既存の機能をすべて破棄するのが安全です。別のプロジェクトを追加するだけで済むという点で、拡張性もあります。

プロジェクトを1つのプロジェクトに保存したい場合は、どの国を使用するかを決めるタイミングを考える必要があります。ビルド時か実行時ですか。 Mavenでは、ビルド時に決定を下しますが、Springは実行時の決定です。実行時に決定できるようにするには、おそらくプロパティファイルが必要です。使用している国を参照せずにできるだけジェネリックとしてビルドを実行し、ユーザーまたは管理者に実行時に使用する国を決定させる。使用するSpringコンテキストファイルへの参照を持つプロパティファイルを提供します。 mainメソッドでは、このプロパティファイルをクラスパスからロードして読み込むSpringコンテキストファイルを決定できます。

この場合、Springコンフィグレーションの共通のBean名を参照してください。ロードする国固有のSpringコンテキストファイルに関係なく、IDのBeanがすべて含まれていることを確認してください。

2

プロファイルを使用すると、Mavenプロファイルによって制御される変数で実行する実装を示すさまざまな実装でプログラムを実行できます。私はこれをいくつかのプロジェクトで行いましたが、1つのコード、1つのjarです。各実装のための異なるjarを構築することはより複雑です。

もっと良いアプローチは、Mavenのマルチプロジェクトです。つまり、それぞれ独自の設定と実装を持つpom.xmlファイルがほとんどないプロジェクトです。

- Parent project 
    - common project (interfaces and common codec) 
    - country 1 project (with dependency of common project) 
    - country 2 project (with dependency of common project) 
    - ...