ant编译重设property的值

来源:互联网 发布:越南陆军实力 知乎 编辑:程序博客网 时间:2024/05/21 11:29
引自:http://qiang106.iteye.com/blog/2097833

ant已经有N多种替代方案了,但也不是ant就没有可用之外了,它的跨平台性还是有很大的优势。

android就经常是使用ant来构建的。

 

ant脚本中property默认是不能重新设置值的,第一次定义之后,在整个project执行过程中是不会再变的。

最简单的定义方式如下:

 

Java代码  收藏代码
  1. <property name="build.target" value="release" />  

但是在我们的编译脚本中经常有可能需要用到可以变的值,另一种值设值方式可以满足我们:

 

Java代码  收藏代码
  1. <var name="build.target" value="release" />  

定义变量可以随时重新设值,但是又有一点,如果我们需要使用condition来条件设值的时候,不好意思,不支持var。 

Java代码  收藏代码
  1. <condition property="BATCH_INPUT" value="${env.BATCH_INPUT}" else="${local.BATCH_INPUT}">  
  2.           <isset property="env.BATCH_INPUT" />  
  3. </condition>  

 

直接点,要property支持重设,也不是不可能,在jdk 1.6之后,使用contrib可以支持,需要定义一个重设的脚本,需要下ant-contrib-0.6.jar到ant的lib目录下

Java代码  收藏代码
  1. <scriptdef name="propertyreset" language="javascript"  
  2.         description="Allows to assign @{property} new value">  
  3.         <attribute name="name"/>  
  4.         <attribute name="value"/>  
  5.         project.setProperty(attributes.get("name"), attributes.get("value"));  
  6. </scriptdef>  

同时增加以下一行声明:

Xml代码  收藏代码
  1. <taskdef resource="net/sf/antcontrib/antlib.xml" />  

 

用法如下:

Java代码  收藏代码
  1. <propertyreset name="chanel" value="${chanelname}"/>  

 这样子就可以直接使用新值了。

本帖完整的示例:

 

Xml代码  收藏代码
  1. <project name="test" default="testA" basedir=".">   
  2.       
  3.      <!--必须定义这个标签-->  
  4.     <taskdef resource="net/sf/antcontrib/antlib.xml" />   
  5.       
  6.     <scriptdef name="propertyreset" language="javascript"  
  7.             description="Allows to assign @{property} new value">  
  8.           <attribute name="name"/>  
  9.             <attribute name="value"/>  
  10.         project.setProperty(attributes.get("name"), attributes.get("value"));  
  11.         </scriptdef>  
  12.   
  13.   
  14.         <property name="nameA" value="A"/>  
  15.         <!--重新定义property,不起作用-->  
  16.         <property name="nameA" value="B"/>  
  17.           
  18.         <var name="nameB" value="A"/>  
  19.         <!--var可以随意设置值-->  
  20.         <var name="nameB" value="B"/>  
  21.           
  22.           
  23.         <property name="nameC" value="A"/>  
  24.         <!--使用自定义的脚本重新设置值-->  
  25.         <propertyreset name="nameC" value="B"/>  
  26.           
  27.       
  28.       
  29.    <target name='testA'>   
  30.      <echo>${nameA}</echo>  
  31.      <echo>${nameB}</echo>   
  32.      <echo>${nameC}</echo>    
  33.    </target>   
  34. </project>  


0 0
原创粉丝点击