Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ANT中更改列表的值_Ant_Ant Contrib - Fatal编程技术网

在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="," />

我需要实时更改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="," />
</target>

<target name="target2">
    <propertycopy name="var" from="x.y.${var}" silent="true"/>
</target>

现在,propertycopy部分可以工作了,但是它不会保留新值。 我尝试了许多变化,但没有一个奏效。 我正在使用ant contrib

非常感谢您的帮助!
Adam

foreach的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;