我需要实时更改的ANT脚本列表的值。 情况是这样的;
我有这些属性:
x.y.6.1=something1
x.y.6.2=something2
x.y.6.3=something3
list=6.1,6.2
我想要列表成为列表= something1; something2
这是代码的要点;
<target name="target1">
<foreach list="${list}" target="target2" param="var" delimiter="," />
</target>
<target name="target2">
<propertycopy name="var" from="x.y.${var}" silent="true"/>
</target>
现在,propertycopy部分作品,但是,它不会让新的价值。 我尝试了许多变化,其中没有工作。 我使用蚂蚁的contrib。
帮助将不胜感激! 亚当
您的foreach的目标属性应该被称为目标的名称。
我想在这里应该是<foreach list="${list}" target="agent_version_to_path" param="var" delimiter="," />
如果我错了,发表您的TARGET2,并解释你想要做什么。
编辑:
确定你的编辑,你已经尝试倍率=“是”?
并且不能更改你的财产(VAR)的名称是相当混乱!
我不是的风扇蚂蚁的contrib任务。 你有没有考虑嵌入脚本语言呢?
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>
<groovy>
properties["list"].split(",").each {
println properties["x.y.${it}"]
}
</groovy>
更新
下面是循环和调用另一个目标更完整的示例:
$ ant
Buildfile: build.xml
process:
doSomething:
[echo] something1
doSomething:
[echo] something2
BUILD SUCCESSFUL
Total time: 0 seconds
build.xml文件
<project name="demo" default="process">
<property file="build.properties"/>
<path id="build.path">
<pathelement location="lib/groovy-all-2.1.5.jar"/>
</path>
<target name="process" description="Process values in a list">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>
<groovy>
properties["list"].split(",").each {
properties.var = properties["x.y.${it}"]
ant.ant(target:"doSomething")
}
</groovy>
</target>
<target name="doSomething">
<echo>${var}</echo>
</target>
</project>
我已经解决了这个问题,在一个恶心的方式,但它的伟大工程!
<project name="Test" default="main">
<property file="agent.properties" />
<property file="temp_updates.txt" />
<taskdef name="propertycopy" classname="net.sf.antcontrib.property.PropertyCopy" />
<taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach" />
<target name="main">
<property name="Agent Updates" value="6.1,6.2" />
<antcall target="create_temp_files" />
<antcall target="agent_updates_target" />
<propertycopy name="custom.agent.release.group" from="updates" silent="true" override="true" />
</target>
<target name="agent_updates_target">
<foreach list="${Agent Updates}" target="agent_version_to_path" param="var" delimiter="," />
</target>
<target name="agent_version_to_path">
<propertycopy name="var" from="agent.installer.${var}" silent="true" override="true"/>
<echo message="${var};" file="temp_updates.txt" append="true" />
</target>
<target name="create_temp_files">
<echo message="updates=" file="temp_updates.txt" />
</target>
</project>
在另一个文件中,“agent.properties”我有这样的;
agent.installer.6.3=something3
agent.installer.6.2=something2
agent.installer.6.1=something1
agent.installer.6.0=...
agent.installer.5.6=...
agent.installer.5.0.12=...
agent.installer.5.0.11=...
agent.installer.5.0.9.5=...
agent.installer.3.8=...
agent.installer.3.7=...
其结果是,一个新的文件“temp_updates.txt”创建,其
updates=something1;something2;
然后我加载到实际的程序。
可能不漂亮,但它工作得很好。
谢谢斯科尔和马克·奥康纳你的帮助,我用这些想法拿出这一个。 我将率你,但我不能:(对不起!