转载

Ant 安装到使用

Ant 安装到使用
(作者:
小末丶g)

一、安装:
 
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>ant
Buildfile:build.xml does not exit

如果你的信息对应了,  那么你的安装配置就成功啦。


二、第一个Ant脚本:

首先编写个 Hello World
package 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 build
ant 中每个任务都可以 这样调用 ant + target name
OK,  简单的任务配置完成

三、整合 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!

mark:本文由ajava.org会员小末丶g编写,mark整理发布。

正文到此结束
Loading...