【问题标题】:Define a list of variables in ant, that can be used in a for-loop在ant中定义一个变量列表,可以在for循环中使用
【发布时间】:2017-02-10 18:37:03
【问题描述】:

我正在为一个有几个依赖项的项目编写一个 ant 构建文件。我需要编写一个单独的文件,其中包含所有项目共有的目标,然后将项目特定的内容写入他们自己的构建文件中。例如,我有一个名为“cleanDependencies”的目标。

<target name="cleanDependencies">
    <echo>Cleaning dependencies... </echo>
    <for list="dep1,dep2" param="dependency">
          <sequential>
                <ant dir="dep/@{dependency}" target="clean" inheritAll="false" />
          </sequential>
    </for>      
</target>

这是我所有项目的共同目标,我想将它分成一个共同的目标文件;类似于

<target name="cleanDependencies">
    <echo>Cleaning dependencies... </echo>
    <for list="${listOfDependencies}" param="dependency">
          <sequential>
                <ant dir="dep/@{dependency}" target="clean" inheritAll="false" />
          </sequential>
    </for>      
</target>

然后,我可以在我的项目的构建文件中定义一个名为“listOfDependencies”的列表,并且可以按照这些行包含来自不同文件的公共目标“cleanDependencies”。

<list name="listOfDependencies"> <!-- Not a valid tag in Ant -->
    <item>dep1</item>
    <item>dep2</item>
</list>

我的问题是:

1) 有没有办法在 ant 中定义变量列表?此问题与另一个问题 (Define a list or a set of variables in ant) 相同,但答案并未提供在 for 循环之外定义列表的方法。

2) 是否有其他方法可以实现这一目标?即一种将公共目标收集到单独文件中的方法,然后将其包含在具有适当变量的项目特定构建文件中。

【问题讨论】:

  • “for”任务不是标准 ant 的一部分,这可能解释了您的一些问题。对于依赖管理,我可以建议查看 Apache ivy。

标签: java for-loop ant


【解决方案1】:

Ant 中没有list 元素或任务。您可以使用以逗号分隔的包含依赖项的属性。公共目标已经依赖于listOfDependencies 属性,因此您需要做的就是从调用目标传递它。应该很简单:

<!-- calling buildfile -->
<property name="listOfDependencies" value="dep1,dep2" />
<ant antfile="common/build.xml" target="cleanDependencies" />

子项目默认继承父项目的所有属性(这可以使用inheritAll属性控制)。

至于替代方案,请查看import 任务,该任务可用于包含公共构建文件并调用它,就好像它的目标已在主构建文件中定义一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2018-04-02
    • 2022-11-03
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多