web-dev-qa-db-ja.com

Groovyを使用してプロパティファイルから値を取得する

Groovyを使用してプロパティファイルから値を取得する方法

キーとしてファイル名を持ち、値として宛先パスを持つプロパティファイル(.properties)が必要です。移動する必要のあるファイルに応じて、実行時にキーを解決する必要があります。

これまでのところ、プロパティをロードすることができますが、ロードされたプロパティから値を「取得」することはできません。

私はスレッドに言及しました: groovy:プロパティーファイルにアクセスする方法? そして、これまでに私が持っているコードスニペットです

def  props = new Properties();
File propFile = 
          new File('D:/XX/XX_Batch/XX_BATCH_COMMON/src/main/resources/patchFiles.properties')
props.load(propFile.newDataInputStream())
def config = new ConfigSlurper().parse(props)
    def ant = new AntBuilder()
    def list = ant.fileScanner {
                fileset(dir:getSrcPath()) {
                    include(name:"**/*")
                }
    }
    for (f in list) {
       def key = f.name
       println(props)
       println(config[key])
       println(config)
       def destn = new File(config['a'])

    }

現時点では、プロパティファイルには次のエントリがあります。

jan-feb-mar.jsp=/XX/Test/1
XX-1.0.0-SNAPSHOT.jar=/XX/Test/1
a=b
c=d

Props.getProperty( 'a')またはconfig ['a']のいずれかを使用して検索すると、正しい値が返されます。コードも試してみました:notation

しかし、config [key]のように変数 "key"の使用に切り替えるとすぐに-> [:]が返されます

私はグルーヴィーなのですが、ここで何が欠けていると言うことはできません。

38
user3151610

物事を複雑にしすぎているように思えます。

仕事をする簡単な例は次のとおりです。

指定されたtest.propertiesファイル:

a=1
b=2

このコードは正常に実行されます。

Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
    properties.load(it)
}

def runtimeString = 'a'
assert properties."$runtimeString" == '1'
assert properties.b == '2'
103
JBaruch

Fileが必要で、ロードするファイルが_src/main/resources_または_src/test/resources_フォルダーまたはクラスパスにある場合を除き、getResource()はそれを解決する別の方法です。

例えば。

_    def properties = new Properties()
    //both leading / and no / is fine
    this.getClass().getResource( '/application.properties' ).withInputStream {
        properties.load(it)
    }

    //then: "access the properties"
    properties."my.key"
_
7
prayagupd

念のため...

プロパティキーにドット(。)が含まれる場合は、キーを引用符で囲むことを忘れないでください。

プロパティファイル:

a.x = 1

グルーヴィー:

Properties properties ...

println properties."a.x"
6

同様の問題があった場合、次の方法で解決しました。

def content = readFile 'gradle.properties'

Properties properties = new Properties()
InputStream is = new ByteArrayInputStream(content.getBytes());
properties.load(is)

def runtimeString = 'SERVICE_VERSION_MINOR'
echo properties."$runtimeString"
SERVICE_VERSION_MINOR = properties."$runtimeString"
echo SERVICE_VERSION_MINOR
3
user3265317