【问题标题】:How to add property tag inside target tag in build.xml in ant如何在ant的build.xml中的目标标签内添加属性标签
【发布时间】:2015-07-13 14:23:55
【问题描述】:

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

【问题讨论】:

标签: java android ant


【解决方案1】:

我建议您在名为“DEV”和“PROD”的 build.xml 文件中定义目标,然后调用 Ant:

蚂蚁开发 或

蚂蚁产品 如果您想坚持当前使用系统属性选择目标的方法,那么@krock 的答案似乎是要走的路。 (但我认为这种方法没有任何优势。)

【讨论】:

    【解决方案2】:

    使用您的项目名称定义用户属性:

    ant -f build.xml -Dprojectname=foobar
    

    并在您的构建文件中使用它:

    <project>
    
    <echo>$${projectname} => ${projectname}</echo> 
    
    <!-- the real work ... -->
    
    </project>
    

    输出:

    [echo] ${projectname} => foobar
    

    -- 编辑--

    你可以使用某种循环,f.e. :

    ant -f build.xml -Dprojectnames=project1,project2,project3
    

    将您的步骤(结帐、编译...)包装在一个宏定义中并为每个项目调用它:

    <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 >= 1.6.0_06 中,因此不需要额外的库。
    还有更复杂的方法,f.e.使用包含您的项目名称的 xmlproperty 文件与 xmltask (= xmldriven build) 结合使用,该文件通过 xpath 表达式提供一些循环机制。
    这取决于您的构建脚本的复杂性。

    【讨论】:

    • 非常感谢,是否可以在一个 build.xml 中包含多个项目,请您举例说明一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多