1

Maven でプロパティを設定したいのですが、Maven なしでアプリケーションを実行するときに適切なデフォルトも読み取ります。

現在、次のようなプロパティ ファイルがあります。

baseUrl=${baseUrl}

maven-resources-pluginを使用して、このプロパティをフィルタリングし、pom でデフォルト プロパティに設定するか、-DbaseUrl=コマンド ラインから上書きすることができます。ここまでは順調ですね。

ただし、さらに一歩進んで、次のようなコードにハックを記述することなく、適切なデフォルトをプロパティ ファイルに設定したいと考えていbaseUrlます (ユニット テストで Maven を使用せずにコードを実行する場合)。

 if ("${baseUrl}".equals(baseUrl)){ /* set to default value */ } 

さらに良いことに、すべての開発者が独自の値を設定できるように、このファイルのバージョン管理を解除したいと考えています。(実際には、開発者が関連するプロパティのみを上書きし、新しいプロパティがビルドを壊さないように、プロパティ ファイルは階層化する必要があります。ちなみに、これは Android プロジェクトであり、このコードを単体テストで実行しています)

4

2 に答える 2

0

最後に、静的ヘルパーを作成することにしました。

public class PropertyUtils {


    public static Properties getProperties(Context context)  {
        AssetManager assetManager =  context.getResources().getAssets();
        Properties properties = new Properties();
        try {
            loadProperties(assetManager, "project.properties", properties);
            if (Arrays.asList(assetManager.list("")).contains("local.properties")){
                loadProperties(assetManager, "local.properties", properties);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return properties;
    }

    private static void loadProperties(AssetManager assetManager, String fileName, Properties properties) throws IOException {
        InputStream inputStream = assetManager.open(fileName);
        properties.load(inputStream);
        inputStream.close();
    }
}

assets ディレクトリの project.properties には次のプロパティがあります。

baseUrl=${baseUrl} 

アセットの local.properties:

baseUrl=http://192.168.0.1:8080/

local.properties はバージョン管理から除外され、すべての project.properties を上書きします。したがって、CI ツールでビルドする場合、baseUrl は関連する値でオーバーライドされ、ローカルで (IntelliJ で) 実行する場合は、local.properties 値が使用されます。

于 2013-06-26T10:30:51.060 に答える
0

のPOMでプロパティを設定するだけ<properties>です。スイッチやプロファイルなどを使用してオーバーライドしない限り、設定値が使用されます-D。あなたの場合、これは次のようになります。

<properties>
    <baseUrl>some_default_url</baseUrl>
</properties>
于 2013-06-20T12:04:19.667 に答える