-->

更改ANT名单的值(Change values of list in ANT)

2019-10-18 07:34发布

我需要实时更改的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。

帮助将不胜感激! 亚当

Answer 1:

您的foreach的目标属性应该被称为目标的名称。

我想在这里应该是<foreach list="${list}" target="agent_version_to_path" param="var" delimiter="," />

如果我错了,发表您的TARGET2,并解释你想要做什么。

编辑:

确定你的编辑,你已经尝试倍率=“是”?

并且不能更改你的财产(VAR)的名称是相当混乱!



Answer 2:

我不是的风扇蚂蚁的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>


Answer 3:

我已经解决了这个问题,在一个恶心的方式,但它的伟大工程!

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

然后我加载到实际的程序。

可能不漂亮,但它工作得很好。

谢谢斯科尔和马克·奥康纳你的帮助,我用这些想法拿出这一个。 我将率你,但我不能:(对不起!



文章来源: Change values of list in ANT