プレフィックスに基づいて、一連の ant プロパティを「マップ」したいと思います (単純に聞こえます)。
解決策はありますが、エレガントではありません (プロパティ ファイルに書き込んでから読み戻す必要があります)。
質問: ANT 内で以下の "load-propertyset" を実行するための、より迅速な/より一般的な/単純な/すぐに使える/簡単な方法はありますか? (...以下に提供した例よりも)
( Groovy > ConfigSlurper > Special Environment Configurationの動作にほぼ類似しています。)
例えば:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Config">
<!-- Section 1. (These will be loaded from a property file...) -->
<property name="a.yyy" value="foo" />
<property name="a.zzz" value="cat" />
<property name="b.xxx" value="bar" />
<property name="b.zzz" value="dog" />
<macrodef name="load-propertyset">
<attribute name="prefix" />
<attribute name="outfile" default="123" />
<attribute name="propset" default="123" />
<sequential>
<propertyset id="@{propset}">
<propertyref prefix="@{prefix}" />
<globmapper from="@{prefix}.*" to="*" />
</propertyset>
<echo level="debug">Created propertyset - '@{propset}' from prefix='@{prefix}'</echo>
<tempfile property="@{outfile}" suffix=".properties" deleteonexit="true" />
<echo level="debug">Writing propset to temp file - '${@{outfile}}'</echo>
<echoproperties destfile="${@{outfile}}">
<propertyset refid="@{propset}"/>
</echoproperties>
<echo level="debug">Reading props from temp file - '${@{outfile}}'</echo>
<property file="${@{outfile}}" />
<delete file="${@{outfile}}" />
</sequential>
</macrodef>
<load-propertyset prefix="a" />
<load-propertyset prefix="b" />
<echo>>>> Using variables xxx=${xxx} yyy=${yyy} zzz=${zzz}</echo>
</project>
たとえば、次のような単純なものが欠けていると確信しています。
- プロパティセット内のプロパティを参照できますか? (例: ${myprops.yyy} ?)
- ${${filter}.hostname} のようなものは避けたいと思います。