在ANT中更改列表的值
我需要实时更改ANT脚本列表的值。 情况就是这样, 我有以下财产:在ANT中更改列表的值,ant,ant-contrib,Ant,Ant Contrib,我需要实时更改ANT脚本列表的值。 情况就是这样, 我有以下财产: x.y.6.1=something1 x.y.6.2=something2 x.y.6.3=something3 list=6.1,6.2 我希望列表变成list=something1;什么 这是守则的要点 <target name="target1"> <foreach list="${list}" target="target2" param="var" delimiter="," />
x.y.6.1=something1
x.y.6.2=something2
x.y.6.3=something3
list=6.1,6.2
我希望列表变成list=something1;什么
这是守则的要点
<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部分可以工作了,但是它不会保留新值。
我尝试了许多变化,但没有一个奏效。
我正在使用ant contrib
非常感谢您的帮助!
Adamforeach的target属性应该是调用的目标的名称 我想这里应该是
如果我错了,发布你的target2并解释你想做什么
编辑:
确定进行编辑,您是否已尝试覆盖=“是”
您不能更改您的属性名称(var),这是相当混乱的 我不喜欢这些任务。你有没有考虑过嵌入一个
编译文件
属性[“列表”]。拆分(“,”)。每个{
properties.var=properties[“x.y.${it}]
ant.ant(目标:“doSomething”)
}
${var}
我已经用一种令人讨厌的方式解决了这个问题,但效果很好
<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>
因此,创建了一个新文件“temp_updates.txt”,其中包含
updates=something1;something2;
然后我将其加载到实际程序中
可能不太漂亮,但效果很好
谢谢斯科尔和马克·奥康纳的帮助,我用这些想法想出了这个。我会给你评分,但我不能:(抱歉!谢谢你的评论,这是我的错-我想删除任何与真实代码有关的内容(以减少混淆)-我忘记将“代理版本”更改为“目标2”(仅在示例中)我编辑了它,再次感谢你通知我名称“var”只是出于测试目的,我对ANT很陌生-事实上,我以前从未使用过它,但我需要修改我们的许多脚本以满足我们的新需求。我应该将覆盖放在哪里?在PropertyCopy部分?是的,请参阅。对于属性副本的名称“var”,您可以使用name=“version.number”或者更容易理解的方法。这种方法听起来很有趣-但你似乎打印了列表变量-有可能这样做吗?列表(0)=x.y.${it}?目前它是列表(0)=${it}。@AdamCohen不清楚你想做什么。我已经包含了一个更完整的示例。当然你可以:)只需点击上升标志!很高兴你的pb解决了。我会的,只要我排名15或以上哈哈:)
<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.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=...
updates=something1;something2;