首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Ant 装配到使用

2012-11-07 
Ant 安装到使用欢迎访问我的社区资源论坛http://www.javadt.com一、安装:??http://ant.apache.org/bindownl

Ant 安装到使用

欢迎访问我的社区资源论坛http://www.javadt.com

一、安装:??http://ant.apache.org/bindownload.cgi ? 这里有下载地址, ?(一般Myeclipse里边是集成的)下载自己想使用的版本把文件放在自己的工作目录里环境变量:
?? ? ? ?新加系统变量:ANT_HOME , 内容: d:\ant_home\apche-ant?? ? ? ?在PATH环境变量中加入Ant 的bin 目录 :%ANT_HOME%\bin
?? ? ? ?如果想让Ant支持JUnit, 需要直接讲JUnit的junit.jar 放在Ant 的lib 目录里,并且记得更改CLASSPATH中原有junit的设定,例如:%ANT_HOME\lib\junit.jar%?
对于 windowsXP ? 、server20003 ?按下图所示配置:Ant 装配到使用?测试安装:CMD 下运行Ant 提示内容为
E:\srcgen\webwork>antBuildfile:build.xml does not exit
如果你的信息对应了, ?那么你的安装配置就成功啦。


二、第一个Ant脚本:
首先编写个 Hello Worldpackage com.test;public class HelloWorld {?? ?public static void main(String[] args) {?? ? ? System.out.println("Hello World");?? ?}?}
接下来的步骤用Ant来完成:首先编写个 build.xml 文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?><project name="HelloWorld" default="run" basedir=".">?? ?<property name="src" value="src"></property>?? ?<property name="dest" value="classes" />?? ?<property name="hello_jar" value="hello1.jar" />?? ?<target name="init">?? ? ? <mkdir dir="${dest}" />?? ?</target>?? ?<target name="compile" depends="init">?? ? ? <javac srcdir="${src}" destdir="${dest}" />?? ?</target>?? ?<target name="build" depends="compile">?? ? ? <jar jarfile="${hello_jar}" basedir="${dest}" />?? ?</target>?? ?<target name="run" depends="build">?? ? ? <java classname="com.test.HelloWorld" classpath="${hello_jar}" />?? ?</target>?? ?<target name="clean">?? ? ? <delete dir="${dest}" />?? ? ? <delete file="${hello_jar}" />?? ?</target>?? ?<target name="rerun" depends="clean,run">?? ? ? <ant target="clean" />?? ? ? <ant target="run" />?? ?</target>???</project>
解释下build.xml 中内容:<project name="HelloWorld" default="run" basedir="."></project>ant所有配置内容必须包含在这之内,name是自己给取的名字,basedir, 是项目根目录,default 代表默认要做的事情?<property name="src" value="src"></property>累死程序中变量的作用?? ?<target name="compile" depends="init">?? ? ? <javac srcdir="${src}" destdir="${dest}" />?? ?</target>把每个要做的事情写成一个target, 有名字depends 是他所以来的target执行这个target之前ant 会检查init是否曾经被执行过如果执行过,则直接执行compile,反之则执行init,之后再执行compile。

例如我们上边所配置:?? ?<target name="compile" depends="init">?? ? ? <javac srcdir="${src}" destdir="${dest}" />?? ?</target>做jar包:?? ?<target name="build" depends="compile">?? ? ? <jar jarfile="${hello_jar}" basedir="${dest}" />?? ?</target>运行:?? ?<target name="run" depends="build">?? ? ? <java classname="com.test.HelloWorld" classpath="${hello_jar}" />?? </target>新建文件夹:?? ?<target name="init">?? ? ? <mkdir dir="${dest}" />?? ?</target>删除生成的文件:?? ?<target name="clean">?? ? ? <delete dir="${dest}" />?? ? ? <delete file="${hello_jar}" />?? ?</target>再次运行,注意这里写出了如何调用其他target的方法:?? ?<target name="rerun" depends="clean,run">?? ? ? <ant target="clean" />?? ? ? <ant target="run" />?? ?</target>
OK , 接下来检查下ant , ?cmd 下运行ant 就会发现完成了。每次改完代码后运行里都需要键入ant如果想重新部署的话那么 cmd 下运行ant buildant 中每个任务都可以 这样调用 ant + target nameOK, ?简单的任务配置完成
三、整合 Ant :把多个build.xml 整合到一起, 平时项目开发可能每个人负责的地方不一样,所以测试的时候大家都自己写个build.xml想弄到一起只有两个选择,一个是自己重写build.xml,这个是很麻烦的,一个是尽量用他们写好的,减少自己的工作量。
举例说明:我们假设有2个组员开发项目,每个组负责部分不同,他们分别有src 和build.xml。这是如果想把他们两分合到一起, 就需要把他们的src和build.xml 拿来, 并且把build.xml放进他们的src里边把src改个名字,例如 src1 ?src2 ?,然后建立一个自己要整合用的build.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?><project name="main" default="build" basedir="."><property name="bin" value="${basedir}\bin"></property><property name="src1" value="${basedir}\src1" /><property name="src2" value="${basedir}\src2" />
<target name="init"><mkdir dir="${bin}" /></target><target name="run"><ant dir="${src1}" target="run" /><ant target="${src2}" target="run" />
</target>
<target name="clean"><delete dir="${src1}" target="clean" /><delete dir="${src2}" target="clean" /></target>
<target name="build" depends="init,call"><copy todir="${bin}"><fileset dir="${src1}"><include name="*.jar"></include></fileset><fileset dir="${src2}"><include name="*.jar"></include></fileset></copy></target><target name="rebuild" depends="build,clean"><ant target="clean"></ant><ant target="build"></ant></target></project>
OK , 任务完成。


四、标签
Touch的使用:
如果文件不存在,创建文件,如果存在,更改最后访问时间为系统当前时间
<touch file="myfile" />
如果文件不存在,创建文件,更改最后访问时间为06/28/2000 2:02 pm
<touch file="myfile" ?datetime="06/28/2000 2:02 pm" />
更改目录下所有文件最后访问时间为06/28/2000 2:02 pm
<touch datetime="06/28/2000 2:02 pm">?? ? ? ? ?<fileset dir="src_dir" /></touch>

Condition 的使用:有<and> , <or> ,<not> 等tag<condition property ="isMacOsButNotMacOsX">?? ? ? ? ? ? ? ? <and>?? ? ? ? ? ? ? ? ? ? ? <os family="mac"/>?? ? ? ? ? ? ? ? ? ? ? <not>?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<os family="unix"/>?? ? ? ? ? ? ? ? ? ? ? </not>?? ? ? ? ? ? ? ? </and></condition>

替换replace:<replace?? ? ? ? ? ? ??file="configure.sh"?? ? ? ? ? ? ? ?value="defaultvalue"?? ? ? ? ? ? ? ?propertyFile="source/name.properties" >?? <replacefilter token="@token1@" />?? <replacefilter token="@token2@" value="value2"/>?? <replacefilter token="@token3@" property="property.key" /></replace>

调用chmod:<chmod perm="go-rwx" type="file" >?? ? ? ? ? ? ? <fileset dir="/web">?? ? ? ? ? ? ? ? ? ? ?<include name="**/*.cgi"/>?? ? ? ? ? ? ? ? ? ? ?<include name="**/*.old"/>?? ? ? ? ? ? ? </fileset>?? ? ? ? ? ? ? <dirset dir="/web">?? ? ? ? ? ? ? ? ? ? ?<include name="**/private_*" />?? ? ? ? ? ? ? </dirset></chmod>

checksum MD5运算:md5文件,然后把值加入foo.bar.MD5属性

<checksum file="foo.bar" /><checksum file="foo.bar" property="foobarMD5"/>
批量MD5文件,指整个目录下的文件,单独建立一个MD5文件,加入所有值。
<checksum>?? ? ? ? ?<fileset dir=".">?? ? ? ? ? ? ? ?<include name="foo*"/>?? ? ? ? ?</fileset></checksum>


Available的使用:
1.如果类存在设置Myclass.present为true,否则false<available classname="org.whatever.Myclass" property="Myclass.present">?
2.文件存在设置jaxp.jar.presen为true,否则false
<property name="jaxp.jar" value="./lib/jaxp11/jaxp.jar"/><available file="${jaxp.jar}" property="jaxp.jar.present">
3.目录存在设置属性为true ?否则false
<available ?file="/usr/local/lib" type="dir" property="local.lib.present">
4.classpath下寻找class ,如果存在设置属性为true 否则false在工程tag下定义path,在target中使用工程:?? <property name="jaxp.jar" value="./lib/jaxp11/jaxp.jar"/>?? <path id="jaxp" location="${jaxp.jar}"/>target:???<available classname="javax.xml.transform.Transfomer" classpathref="jaxp" property="jaxp11.present"/>
5.如果classpath下发现有文件, 则属性为true否则false<available property="have.extras" resource="extratask.properties">?? <classpath>?? ? ? <pathelement location="/usr/local/ant/extra.jar"?? </classpath></available>

设置property:
1.设置属性name-value<property name="foo.dist" value="dist"/>2.读取属性文件中的配置<property file="foo.properties"/>3.读取网络中的property-set<property url="http://+your url+/bla/pro/foo.properties"/>4.读取文件中属性配置<property resource="foo.properties"/>5.环境变量读取<property environment="env"/>6.读取属性文件中属性,引用为全局<property file="/Users/antoine/.ant-global.properties"/>

错误处理:1.错误显示方式<fail>Something wrong here.</fail> ?
<fail message="${属性}."/> ? ?两种
如果这个属性不存在显示错误<fail unless="failCondition" message="unless Condition" />存在的属性错误显示<fail if="failCondition" message="if Condition" />
符合条件显示错误,这里条件是(没设置属性)<fail message="tag condition">?? <condition>?? ? <not>?? ? ? ?<isset property=" failCondition " />??? ? </not>?? ?</condition></fail>
OK, ?END!

热点排行