使用 foreach 向列表添加后缀
Adding suffix to a list with foreach
我包含一个 .properties 文件,其中包含一个属性列表:
configuration.files = file1, file2
configuration.files.file1.source = config/filename1
configuration.files.file2.source = config/filename2
现在我需要将每个文件的路径更改为如下所示:
vendor/project/config/filename1
vendor/project/config/filename2
为了实现这一点,我尝试 foreach 这个列表并在前面加上该后缀并覆盖现有的 属性:
<foreach list="${configuration.files}" target="_prepend-vendor-path" param="file" >
<property name="configuration.files.${file}.source" value="/vendor/project/${configuration.files.${file}.source}" override="true"/>
</foreach>
<target name="_prepend-vendor-path" >
<echo msg="${configuration.files.${file}.source}" />
</target>
这不起作用,我不明白为什么。甚至可以使用 ${suffix}.name 这样的目标名称吗?如果没有,我怎么能在这里实现我的目标?
我只是为此做了一些解决方法,将属性及其值写入文件并在循环完成后读入它们 override = true
:
<target name="_prepend-vendor-path" >
<exec dir="${project.basedir}" command="echo configuration.files.${file}.source = /vendor/project/${configuration.files.${file}.source} >> ${project.temp.config}" passthru="true" checkreturn="true" />
</target>
在 foreach 之后简单地:
<property file="${project.temp.config}" override="true"/>
由于某些原因,属性不会在 foreach 中被覆盖,我只是想不通为什么,但这个小技巧对我来说很成功。
您可以使用 property task using a filterchain and a regular expression replacement 为文件中的 属性 值添加后缀:
<?xml version="1.0"?>
<project name="Phing Build Tests" default="append-custom-path" basedir=".">
<target name="append-custom-path">
<property file="prop.properties">
<filterchain>
<replaceregexp>
<regexp pattern="^(.*)" replace="vendor/project/"/>
</replaceregexp>
</filterchain>
</property>
<echo>${configuration.files.file1.source}</echo>
<echo>${configuration.files.file2.source}</echo>
</target>
</project>
我包含一个 .properties 文件,其中包含一个属性列表:
configuration.files = file1, file2
configuration.files.file1.source = config/filename1
configuration.files.file2.source = config/filename2
现在我需要将每个文件的路径更改为如下所示:
vendor/project/config/filename1
vendor/project/config/filename2
为了实现这一点,我尝试 foreach 这个列表并在前面加上该后缀并覆盖现有的 属性:
<foreach list="${configuration.files}" target="_prepend-vendor-path" param="file" >
<property name="configuration.files.${file}.source" value="/vendor/project/${configuration.files.${file}.source}" override="true"/>
</foreach>
<target name="_prepend-vendor-path" >
<echo msg="${configuration.files.${file}.source}" />
</target>
这不起作用,我不明白为什么。甚至可以使用 ${suffix}.name 这样的目标名称吗?如果没有,我怎么能在这里实现我的目标?
我只是为此做了一些解决方法,将属性及其值写入文件并在循环完成后读入它们 override = true
:
<target name="_prepend-vendor-path" >
<exec dir="${project.basedir}" command="echo configuration.files.${file}.source = /vendor/project/${configuration.files.${file}.source} >> ${project.temp.config}" passthru="true" checkreturn="true" />
</target>
在 foreach 之后简单地:
<property file="${project.temp.config}" override="true"/>
由于某些原因,属性不会在 foreach 中被覆盖,我只是想不通为什么,但这个小技巧对我来说很成功。
您可以使用 property task using a filterchain and a regular expression replacement 为文件中的 属性 值添加后缀:
<?xml version="1.0"?>
<project name="Phing Build Tests" default="append-custom-path" basedir=".">
<target name="append-custom-path">
<property file="prop.properties">
<filterchain>
<replaceregexp>
<regexp pattern="^(.*)" replace="vendor/project/"/>
</replaceregexp>
</filterchain>
</property>
<echo>${configuration.files.file1.source}</echo>
<echo>${configuration.files.file2.source}</echo>
</target>
</project>