如何在ant中的build.xml中的目标标记内添加属性标记

时间:2014-05-06 06:52:13

标签: java android ant

我有5个项目的相同源代码,我想在ANT中使用相同的构建文件构建每个项目。我想使用每个项目的名称来构建代码。

2 个答案:

答案 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表达式提供一些循环机制。
这取决于您的构建文件的复杂性。