2016-07-29 44 views
0

我包括一个属性文件,其中有属性的列表:后缀添加到列表用foreach

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?如果不是,我怎么能在这里实现我的目标?

回答

0

我只是做了一些办法解决这个,写出来的属性和它们的值到一个文件,看书他们循环完成后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中被覆盖,我只是无法找出原因,但是这个小诀窍为我所用。