Groovyアプリケーションの設定には、標準Javaプロパティファイルを頻繁に使用します。私が欠けていた機能の1つは、プロパティ値の一部として変数を使用できるため、使用中に動的に展開することができる点です。GroovyをJavaプロパティの変数展開に使用する
- 拡張するプロパティに注釈を付けるには、特殊な形式を使用します。私はそのようなテンプレートを二重の感嘆符(!)で囲むことにしました。これらのプロパティ値は基本的にローカル変数で展開されるテンプレートです
- アプリケーションのプロパティを使用する前に、groovyの 'evaluate'メソッドを使用してテンプレートのアプリケーション変数を展開します。
- 元のプロパティキーをだから、使用する前に新しい値が
、私はプロパティファイルを持っている場合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]
この不一致の原因は何ですか?私はプロパティマップに表示されている値を返すことになります。
ちなみに、私はGroovyでProperties.getProperty()とProperties.setProperty()を使用することは避けています。私は、プロパティのオブジェクトを扱う際に、マップ構文とセマンティクスを使用する方が好きです。ああ、確か@BalRog文字列に強制変換 – BalRog
は、問題を解決します。ありがとうございました! –