黑马程序员 ---------------------- ANT 学习笔记

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

</pre><p></p><p></p><p></p><p style="margin:10px auto; padding-top:0px; padding-bottom:0px; line-height:19px; font-size:13px; font-family:Verdana,Arial,Helvetica,sans-serif; background-color:rgb(254,254,242)"><span style="white-space:pre"></span>ant——<span style="margin:0px; padding:0px; line-height:1.5">Apache Ant,是一个将</span><a target=_blank target="_blank" href="http://baike.baidu.com/view/37.htm" style="margin:0px; padding:0px; color:rgb(7,93,179)">软件</a><span style="margin:0px; padding:0px; line-height:1.5">编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache</span><a target=_blank target="_blank" href="http://baike.baidu.com/view/37.htm" style="margin:0px; padding:0px; color:rgb(7,93,179)">软件</a><span style="margin:0px; padding:0px; line-height:1.5">基金会所提供。</span></p><p style="margin:10px auto; padding-top:0px; padding-bottom:0px; line-height:19px; font-size:13px; font-family:Verdana,Arial,Helvetica,sans-serif; background-color:rgb(254,254,242)"><span style="margin:0px; padding:0px; line-height:1.5">这里就附上学习过程中的一个例子,里面有很好的注释。查看注释就基本上知道每个目标target的作用目的了。</span></p><p style="margin:10px auto; padding-top:0px; padding-bottom:0px; line-height:19px; font-size:13px; font-family:Verdana,Arial,Helvetica,sans-serif; background-color:rgb(254,254,242)"><span style="margin:0px; padding:0px; line-height:1.5"></span></p><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
<project name="myAntProject" default="prepross" basedir=".">
    <description> basedir="." 定义的是默认目录为当前目录</description>
    <description> ant 也是可以调试的</description>
    <property name="hello" value="pro"/>
    <property name="mk" value="my"/>
    
    <target name="init">
        <mkdir dir="${hello}"/>
    </target>        
    
    <target name="second" depends="init">
        <mkdir dir="${mk}"/>
    </target>
    
    <target name="prepross" depends="init,second">
        <delete dir="${hello}"/>
        <delete dir="${mk}"/>
    </target>
    
    
    
    <target name="myCompile" description="编译文件" depends="second">
        <javac srcdir="src" destdir="${mk}" includeAntRuntime="false"></javac>
    </target>
    
    <description>
        创建jar文件
        destfile="${hello}/package.jar" 存放的位置
        basedir="${mk}" 编译好的文件来源
    </description>
    
    <target name="dist" depends="myCompile">
        <jar destfile="${hello}/package.jar" basedir="${mk}"></jar>
    </target>
    
    
    
    
    <description>
        value="${user.name}" ant 提供的属性  可以直接用
        attribute name="Main-Class" value="package1.JframeTest.java"/>
        指定jar的主类 name="Main-Class"固定的要大写
    </description>
    
    <target name="mkjarrun" depends="myCompile">
        <tstamp description="时间戳 这里先获得时间 后面再使用 ${DSTAMP}"></tstamp>
        <jar destfile="${hello}/package-${DSTAMP}.jar" basedir="${mk}">
            <manifest>
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Main-Class" value="package1.JframeTest"/>
            </manifest>
        </jar>
    </target>
    
    
    <target name="deltefile" description="删除文件"> 
        <delete file="${hello}/package.jar"></delete>
    </target>
    
    <description>
        复制和移动问文件以及目录 move copy
        tofile="C://A2.java"可以冲命名
        todir="c://"  不可以重新命名 拷贝到目录下
    </description>
    
    <target name="copyfile">
        <copy file="src/package1/A.java" tofile="C://A2.java" ></copy>
    </target>
    
    
    <target name="movefile" description="相当于文件的剪切功能">
        <move file="src/package1/A.java" tofile="c://ss.java"></move>
    </target>
    
    
    <target name="zipfile">
        <zip destfile="${hello}/package.zip"  basedir="${mk}"></zip>
    </target>
    
    <property name="new" value="newpackage"></property>
    <target name="mknew">
        <mkdir dir="${new}"/>
    </target>
    <description>
        解压文件  src="${hello}/package.zip"指定文件的位置  dest="${new}" 指定解压到哪个目录下
    </description>
    <target name="unzipfile" depends="mknew">
        <unzip dest="${new}" overwrite="true" src="${hello}/package.zip" ></unzip>
    </target>
    
    <property name="replacefile" value="input.txt"></property>
    <description>
        summary="on" 属性设置为true或者on 就可以输出找到和替换字符串实例的数目
    </description>
    <target name="replacewords" description="替换文件中替换字符串">
        <replace file="${replacefile}" token="l" value="替换" summary="on"></replace>
    </target>
    
    
    
    
    
    <description>
        模式匹配 
(当前目录)        src*/*.java 将匹配带src前缀的任意数目的目录的所有java文件
(当前目录包括其子目录)        还有一种模式结构:**,它匹配任意数目的目录 例如模式 **/*.java将匹配当前目录下的所有java文件
    </description>
    <property name="dangqian" value="src"></property>
    <target name="copyjavafile" description="把src目录下的所有java文件全都拷贝到pro目录下">
        <copy todir="${hello}">
            <fileset dir="${dangqian}">
                <include name="**/*.java"/>
            </fileset>
        </copy>
        
    </target>
    
    
    <description>
        ant自定义任务
    </description>
    <taskdef name="myFileSortExamole" classname="MyOwn.FileSorter" classpath="bin"> 
    </taskdef>
    
    <target name="FileSort">
        <myFileSortExamole srcFile="input.txt" destFile="output.txt">
        </myFileSortExamole>
    </target>
    
    
    
    
</project>

关于ant的介绍其实百度百科介绍相当全面,比课本上都好。 ANT 

http://baike.baidu.com/link?url=7GfHJUNFHIeVvEdz_I69_3fnnM429F-Xf2x3YWirkqKO_12xKm4ui0PEttmPyS-Mi2Z6zQMMlya2a3buA-bJG_

自定义ant任务,首先要把ant.jar这个jar包引用到工程目录里,之后编写自己的ant任务类的时候只需要继承 org.apache.tools.ant.Task;

之后Overwrite  它的execute方法即可。这要注意自己的task类中的成员变量就好似再ant  build.xml中的各个属性名,使用的时候也一样,属性再xml中赋值之后方法会自动调用set方法。

package MyOwn;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
/**
 * @author Tai
 * 自定义ant功能,文件中的没一行排序
 * srcFile destFile 再ant中定义好之后会自动掉set方法 这里就会有值了
 */
public class FileSorter extends Task
{
    
    private File srcFile;
    private File destFile;
    public File getSrcFile()
    {
        return srcFile;
    }
    public void setSrcFile(File srcFile)
    {
        this.srcFile = srcFile;
    }
    public File getDestFile()
    {
        return destFile;
    }
    public void setDestFile(File destFile)
    {
        this.destFile = destFile;
    }
    
    @Override
    public void execute() throws BuildException
    {
        try
        {
            BufferedReader fromFile = new BufferedReader(new FileReader(srcFile));
            BufferedWriter toFile = new BufferedWriter(new FileWriter(destFile));
            String line = fromFile.readLine();
            List<String> list = new ArrayList<String>();
            while(line != null)
            {
                list.add(line);
                line = fromFile.readLine();
            }
            Collections.sort(list);
            
            for (ListIterator<String> li = list.listIterator();li.hasNext();)
            {
                String str = li.next();
                toFile.write(str);
                toFile.newLine();
            }
            
            toFile.close();
            fromFile.close();
            
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        
    }
    
    
}

FileSorter

上面是自己定义的文件按照每行排序的task  下面是再XML中使用它。
<description>
        ant自定义任务
    </description>
    <taskdef name="myFileSortExamole" classname="MyOwn.FileSorter" classpath="bin"> 
    </taskdef>
    
    <target name="FileSort">
        <myFileSortExamole srcFile="input.txt" destFile="output.txt">
        </myFileSortExamole>
    </target>

之后就可以再eclipse的ant试图下点击运行自己ant程序了,ant的强大之处并非仅仅再次,而在于使用ant可以成为我们的自动化构建工具,这点的实用价值很高哦。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值