我有5个项目的相同源代码,我想在ANT中使用相同的构建文件构建每个项目。我想使用每个项目的名称来构建代码。
答案 0 :(得分:1)
我建议你在build.xml文件中定义名为“DEV”和“PROD”的目标,然后调用Ant作为:
ant DEV 或
ant PROD 如果你想坚持使用当前使用系统属性来选择目标的方法,那么@ krock的答案似乎就是要走的路。 (但我认为这种方法没有任何优势。)
答案 1 :(得分:0)
使用您的项目名称定义userproperty:
ant -f build.xml -Dprojectname=foobar
并在构建文件中使用它:
<project>
<echo>$${projectname} => ${projectname}</echo>
<!-- the real work ... -->
</project>
输出:
[echo] ${projectname} => foobar
- 编辑 -
你可以使用某种循环,例如。 :
ant -f build.xml -Dprojectnames=project1,project2,project3
在macrodef中包装你的步骤(checkout,compile ...)并为每个项目调用它:
<project>
<macrodef name="foobar">
<attribute name="projectname"/>
<sequential>
<echo>Projectname : @{projectname}</echo>
<!-- the real work -->
</sequential>
</macrodef>
<script language="javascript">
<![CDATA[
var projects = project.getProperty('projectnames').split(',');
for (i=0; i < projects.length; i++) {
macro = project.createTask('foobar');
macro.setDynamicAttribute('projectname', projects[i]);
macro.perform();
}
]]>
</script>
</project>
输出:
[echo] Projectname : project1
[echo] Projectname : project2
[echo] Projectname : project3
您也可以创建ant目标而不是macrodef
Javascript引擎包含在Java&gt; = 1.6.0_06中,因此不需要额外的库
还有更复杂的方法,例如。使用xmlproperty文件保存项目名称并结合xmltask(= xmldriven build),它通过xpath表达式提供一些循环机制。
这取决于您的构建文件的复杂性。