生成逗号分隔的ist

时间:2014-12-08 14:21:09

标签: ant ant-contrib

我正在尝试创建一个构建脚本,该脚本将调用将用于创建多个项目的外部应用程序。运行外部应用程序时,可能需要将一些外部库传递给它。问题是,对于每个项目,我都不知道需要哪些库(如果有的话)。

所以为了达到这个目的,我认为最好的方法如下:

1)为每个项目创建一个lib.property文件,该文件包含外部库的列表。即     LIB1 = XXX     LIB2 = CCC     LIB3 = YYY

2)让我的构建脚本“读取”属性文件以确定外部库,然后将其构建到外部应用程序的exec命令行以及外部库引用。 即myApp -lib1,lib2,lib3

这是一种明智/可行的方法吗?我想在这里写一下,但是如果ANT有更好的方法我会欣赏任何建议吗?

这是我到目前为止所写的

<target name="info">
<echo>Reading lib file</echo>
<property file="lib.properties" prefix="x"/>
<propertyselector property="propertyList" delimiter="," match="LIB[0-9]" select="\0" />
<echo> List LIBS in loop</echo>
<for list="${propertyList}" param="sequence">
<sequential>
<echo>${x.@{sequence}}</echo>
</sequential>
</for>
</target>

1 个答案:

答案 0 :(得分:1)

使用 var 任务

<project name="MyProject" default="info" basedir=".">
    <target name="info">
        <taskdef resource="net/sf/antcontrib/antcontrib.properties">
            <classpath>
                <pathelement location="${basedir}/ant-contrib-0.6.jar"/>
            </classpath>
        </taskdef>

        <echo>Reading lib file</echo>
        <property file="lib.properties" prefix="x"/>
        <propertyselector property="propertyList" delimiter="," match="LIB[0-9]" select="\0" />
        <echo> List LIBS in loop</echo>

        <var name="x" value=""/>
        <for list="${propertyList}" param="sequence">
            <sequential>
                <echo>${x.@{sequence}}</echo>
                <var name="x" value="${x.@{sequence}},${x}"/>
            </sequential>
        </for>
        <var name="x" value="-${x}"/>

        <echo>Final: ${x}</echo>
    </target>
</project>

但是并不完美:

 info:
 [echo] Reading lib file
 [echo]  List LIBS in loop
 [echo] yyy
 [echo] ccc
 [echo] xxx
 [echo] Final: -xxx,ccc,yyy,