`
qiang106
  • 浏览: 383320 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ant编译重设property的值

阅读更多

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

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

 

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

最简单的定义方式如下:

 

<property name="build.target" value="release" />

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

 

<var name="build.target" value="release" />

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

<condition property="BATCH_INPUT" value="${env.BATCH_INPUT}" else="${local.BATCH_INPUT}">
          <isset property="env.BATCH_INPUT" />
</condition>

 

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

<scriptdef name="propertyreset" language="javascript"
   		description="Allows to assign @{property} new value">
    	<attribute name="name"/>
    	<attribute name="value"/>
       	project.setProperty(attributes.get("name"), attributes.get("value"));
</scriptdef>

同时增加以下一行声明:

<taskdef resource="net/sf/antcontrib/antlib.xml" />

 

用法如下:

<propertyreset name="chanel" value="${chanelname}"/>

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

本帖完整的示例:

 

<project name="test" default="testA" basedir="."> 
    
     <!--必须定义这个标签-->
    <taskdef resource="net/sf/antcontrib/antlib.xml" /> 
    
    <scriptdef name="propertyreset" language="javascript"
    		description="Allows to assign @{property} new value">
   		  <attribute name="name"/>
    		<attribute name="value"/>
        project.setProperty(attributes.get("name"), attributes.get("value"));
		</scriptdef>


 		<property name="nameA" value="A"/>
 		<!--重新定义property,不起作用-->
 		<property name="nameA" value="B"/>
 		
 		<var name="nameB" value="A"/>
 		<!--var可以随意设置值-->
 		<var name="nameB" value="B"/>
 		
 		
 		<property name="nameC" value="A"/>
 		<!--使用自定义的脚本重新设置值-->
 		<propertyreset name="nameC" value="B"/>
 		
    
    
   <target name='testA'> 
     <echo>${nameA}</echo>
     <echo>${nameB}</echo> 
     <echo>${nameC}</echo>  
   </target> 
</project>

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics