使用 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>