我正在尝试创建一个构建脚本,该脚本将调用将用于创建多个项目的外部应用程序。运行外部应用时,可能需要向其传递一些外部库。问题是对于每个项目,我都不知道需要哪些库(如果有的话)。
因此,为了实现这一目标,我认为最好的方法如下:
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=" " />
<echo> List LIBS in loop</echo>
<for list="${propertyList}" param="sequence">
<sequential>
<echo>${x.@{sequence}}</echo>
</sequential>
</for>
</target>
使用 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=" " />
<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,