我正在尝试创建一个构建脚本,该脚本将调用将用于创建多个项目的外部应用程序。运行外部应用程序时,可能需要将一些外部库传递给它。问题是,对于每个项目,我都不知道需要哪些库(如果有的话)。
所以为了达到这个目的,我认为最好的方法如下:
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>
答案 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,