2016-08-19 10 views
3

Groovyアプリケーションの設定には、標準Javaプロパティファイルを頻繁に使用します。私が欠けていた機能の1つは、プロパティ値の一部として変数を使用できるため、使用中に動的に展開することができる点です。GroovyをJavaプロパティの変数展開に使用する

  1. 拡張するプロパティに注釈を付けるには、特殊な形式を使用します。私はそのようなテンプレートを二重の感嘆符(!)で囲むことにしました。これらのプロパティ値は基本的にローカル変数で展開されるテンプレートです
  2. アプリケーションのプロパティを使用する前に、groovyの 'evaluate'メソッドを使用してテンプレートのアプリケーション変数を展開します。
  3. 元のプロパティキーをだから、使用する前に新しい値が

、私はプロパティファイルを持っている場合config.propertiesのような性質を持つ

version=2.3 
local_lib=!!${env['GROOVY_HOME']}/${configProps.getProperty('version')}/lib!! 

local_libプロパティは、GROOVY_HOME環境変数とバージョンプロパティ値から展開されます。私のアプリケーションで

次のように、私はこれをコード化されています:

//Load the environment variables and configuration file 
env=System.getenv() 
configFile=new File('config.properties') 
configProps= new Properties() 
configProps.load(configFile.newDataInputStream()) 

//Replace configuration property values with their expanded equivalent 
configProps.each{ 
    //if a property value is a template we evaluate it 
    if (it.value.startsWith('!!')){ 
    valTemplate=it.value.replace('!!','"') 
    it.value=evaluate(valTemplate) 
    } 
} 

//then we use the expanded property values 

は、これが動作しているようです。私は

println configProps 

を行うと、私は値が

を拡大していないヌルされていることがわかりしかし、拡張されたプロパティののgetPropertyメソッドはnullを返します。

assert configProps.getProperty('local_lib')=='C:\\DEVTOOLS\\groovy-2.4.7/2.3/lib' 
    |   |      | 
    |   null     false 
    [local_lib:C:\DEVTOOLS\groovy-2.4.7/2.3/lib, version:2.3] 

この不一致の原因は何ですか?私はプロパティマップに表示されている値を返すことになります。

答えて

5

local_libの値はStringのように見えますが、そうではありません。 GStringであり、必要に応じてStringに遅れて強制的に強制されます(configPropsのマップ値を印刷するときのように)。

したがって、Properties.getProperty()の少しの既知の効果がここで有効になります。実際のマップ値が文字列でない場合、Properties.getProperty()nullを返します。

したがって、プロパティマップに値を格納する前に、GStringStringに強制する必要があります。これと同じように:

it.value=evaluate(valTemplate).toString() 

または

it.value=evaluate(valTemplate) as String 

はその後、下流の目的の結果が表示されるはずです。

+0

ちなみに、私はGroovyでProperties.getProperty()とProperties.setProperty()を使用することは避けています。私は、プロパティのオブジェクトを扱う際に、マップ構文とセマンティクスを使用する方が好きです。ああ、確か@BalRog文字列に強制変換 – BalRog

+0

は、問題を解決します。ありがとうございました! –

関連する問題