博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ant 之传参数
阅读量:6404 次
发布时间:2019-06-23

本文共 2685 字,大约阅读时间需要 8 分钟。

  hot3.png

Ant

给Ant脚本传递参数的最佳实践

覆盖内部参数

覆盖property属性的值

多个参数

给ant传递多个参数

传递多个property参数

 

Ant是一个Make Tool,主要用于代码的编译,构建。当然,也有很多Ant爱好者开发了很多外部任务扩展了它的功能。它无界面,跨平台的特性,正好适用于软件开发人员。Ant已经成为软件开发人员开发过程中的一道利器。

在项目开发的过程中,Ant除了会被用来进行编译,打包,生成各种报告外,还可以被用来写开发中用到的工具。

当然了,既然是开发中用到,参数的传递也少不了了。那么,怎么样做才是更好的方法呢?

 

 

预备知识

1. Ant脚本中有<property>属性,可以用来设置值。

    但是一定要了解它的作用域和顺序。

    直接在<project>节点下的<property>所设置的值,所有的<target>都可以使用。而<target>节点下的<property>只在本<target>内部有效。

    <target>内部定义的<property>必须位于使用它的代码之前,因为Ant是边解析配置文件边执行的。如果定义的部 分放到了使用的部分之后,那么使用的部分就会认为没有定义。也就是说,假如A和B是两段使用到了<property>的部分,而 把<property>放到A和B之间的话,那么A不能使用这个<property>,而B则可以使用。但 是<project>节点下的<property>则没有这个问题,Ant优先读取完所有<property>属性 之后,才会去执行具体的<target>。

2. Ant中的<property>除了可以使用[name/value,name/location]这样的键值对外,还可以使用属性[file]加载properties文件。

    相比较而言,properties文件比xml更容易让普通使用者接受。

3. 在使用命令执行Ant脚本时,可以通过"-Dname=value"的方式向Ant脚本传递参数。

    如果在执行命令的时候,使用了"ant -f xxxx.xml -Dbuild.name =helloProject"之类的命令的话,那么Ant脚本中所有位置都可以使用${

build.name }来使用这个属性的值。

     这一种方式,等同于<project>下的<property>。

4. Ant脚本中的<property>是有优先级区分的。

    如果在<project>有两个同名的<property>,Ant只读取第一个定义的值,不管是[name/value; name/location]还是[file]的定义方式。

    通过上面3中介绍的"-Dname=value"的方式定义的值的优先级比<project>下的<property>的优先级高。

 

 

最佳实践

1. 把所有需要用户传递的参数放到一个properties文件中去,并把定义部分<property file="build.properties">放到Ant脚本中的最前面。

2. 不要设计太多的参数。工具本来就是要减轻用户负担的,如果有太多的参数需要设置的话,任谁也要考虑一下使用成本的。

3.  如果参数只需要设置一次,以后不需要变更的话,那么算是最好的了。如果每一次执行都要传递不同的参数的话,可以考虑提供针对特定OS的脚本,使 用"-Dname=value"来简化使用方法,比如说Windows的bat,linux/unix的sh文件等。不过,写特定OS的脚本是一种不推荐 的方式,这样就把Ant本来拥有的跨平台能力给抹去了。

 

 

例子:

 

可以这样执行,并给build.xml传递参数,覆盖原有默认值。

nohup ant -D dateStr =2010-12-25 & 

 

<project name="Yingxiao" default="all"> 

    <target name="setProperties" description="setup the common properties"> 
        <property name="src.dir" value="src"/> 
        <property name="images.dir" value="images"/> 
        <property name="classes.dir" value="classes"/> 
        <property name="lib.dir" value="lib"/> 
        <property name="backup.dir" value="bak"/> 
        <property name="jar.file" value="${lib.dir}/Yingxiao.jar"/> 
        
        <property name="dateStr ">2010-12-20 "/> 
        <property name="className" value="null"/> 
    </target> 
... ... 
    <target name="MainProcess" depends="compile" description="java"> 
        <java classname="com.wangcheng.xiaoai.yingxiao.main.MainProcess" 
            fork="true" maxmemory="2000m">
            <arg value="dateStr "/>
            <classpath>
                   <pathelement location="${classes.dir}"/>
                   <pathelement path=""/>
                   <fileset dir="lib">
                    <include name="*.jar"/>
                  </fileset>
            </classpath>
       </java>
    </target> 
</project>

 

同理,如果传递多个参数呢?需要多个-D

nohup ant -D dateStr =2010-12-25 -DdeleteHis=true &

 

 

原理:

 

本质上,-D参数传递的是java命令中-D传递的参数。

在命令提示符下输入命令java,可以看到-D用法提示,

#java

-D<name>=<value>

              set a system property

 

参考:

http://blog.csdn.net/superbeck/archive/2009/07/18/4359870.aspx

转载于:https://my.oschina.net/phacks/blog/392804

你可能感兴趣的文章
jenkins 手动执行_Jenkins 入门
查看>>
怎么判断冠词用a还是an_葡语干货 | 葡萄牙语冠词用法整理大全
查看>>
js传参不是数字_JS的Reflect学习和应用
查看>>
三个不等_数学一轮复习05,从函数观点看方程与不等式,记住口诀与联系
查看>>
右键新建文件夹_Macos电脑鼠标右键木有新建文档咋办,有办法,莫捉急
查看>>
卡尺测量的最小范围_汽车维修工具-测量用具
查看>>
网优5g前景_5G网络优化师前景怎么样?
查看>>
竞态条件的赋值_[译] part25: golang Mutex互斥锁
查看>>
delmatch oracle_完美完全卸载(清除)oracle数据库的方式(方法)
查看>>
pyqt 滚动条 美化_Pyqt5 关于流式布局和滚动条的综合使用示例代码
查看>>
51单机片 编译hex_单片机爬坑记-05-编译环境(完)
查看>>
java 正则表达式 img_Java正则表达式获得html字符串里的<img src=""/> 中的url列表
查看>>
dbutils java_Java篇-DBUtils与连接池
查看>>
java 文件crc校验_一个获取文件crc32校验码的简洁的java类 | 学步园
查看>>
java flatmapfunction_Java8 Stream flatmap中间操作用法解析
查看>>
java rmi spring 4.0_Java Spring RMI一些尝试
查看>>
JAVA怎么连接华为的HDFS系统_JAVA-API操作HDFS文件系统(HDFS核心类FileSystem的使用)...
查看>>
java牛客网四则运算_数据库刷题—牛客网(51-61)
查看>>
Java get set6_JDK6的新特性(转)
查看>>
java发送邮件 不登陆_Java邮件到Exchange Server“不支持登录方法”
查看>>