• Ant


    ant——Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供。

    这里就附上我学习过程中的一个例子,里面有很好的注释。查看注释就基本上知道没个目标target的作用目的了。

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <project name="myAntProject" default="prepross" basedir=".">
      3     <description> basedir="." 定义的是默认目录为当前目录</description>
      4     <description> ant 也是可以调试的</description>
      5     <property name="hello" value="pro"/>
      6     <property name="mk" value="my"/>
      7     
      8     <target name="init">
      9         <mkdir dir="${hello}"/>
     10     </target>        
     11     
     12     <target name="second" depends="init">
     13         <mkdir dir="${mk}"/>
     14     </target>
     15     
     16     <target name="prepross" depends="init,second">
     17         <delete dir="${hello}"/>
     18         <delete dir="${mk}"/>
     19     </target>
     20     
     21     
     22     
     23     <target name="myCompile" description="编译文件" depends="second">
     24         <javac srcdir="src" destdir="${mk}" includeAntRuntime="false"></javac>
     25     </target>
     26     
     27     <description>
     28         创建jar文件
     29         destfile="${hello}/package.jar" 存放的位置
     30         basedir="${mk}" 编译好的文件来源
     31     </description>
     32     
     33     <target name="dist" depends="myCompile">
     34         <jar destfile="${hello}/package.jar" basedir="${mk}"></jar>
     35     </target>
     36     
     37     
     38     
     39     
     40     <description>
     41         value="${user.name}" ant 提供的属性  可以直接用
     42         attribute name="Main-Class" value="package1.JframeTest.java"/>
     43         指定jar的主类 name="Main-Class"固定的要大写
     44     </description>
     45     
     46     <target name="mkjarrun" depends="myCompile">
     47         <tstamp description="时间戳 这里先获得时间 后面再使用 ${DSTAMP}"></tstamp>
     48         <jar destfile="${hello}/package-${DSTAMP}.jar" basedir="${mk}">
     49             <manifest>
     50                 <attribute name="Built-By" value="${user.name}"/>
     51                 <attribute name="Main-Class" value="package1.JframeTest"/>
     52             </manifest>
     53         </jar>
     54     </target>
     55     
     56     
     57     <target name="deltefile" description="删除文件"> 
     58         <delete file="${hello}/package.jar"></delete>
     59     </target>
     60     
     61     <description>
     62         复制和移动问文件以及目录 move copy
     63         tofile="C://A2.java"可以冲命名
     64         todir="c://"  不可以重新命名 拷贝到目录下
     65     </description>
     66     
     67     <target name="copyfile">
     68         <copy file="src/package1/A.java" tofile="C://A2.java" ></copy>
     69     </target>
     70     
     71     
     72     <target name="movefile" description="相当于文件的剪切功能">
     73         <move file="src/package1/A.java" tofile="c://ss.java"></move>
     74     </target>
     75     
     76     
     77     <target name="zipfile">
     78         <zip destfile="${hello}/package.zip"  basedir="${mk}"></zip>
     79     </target>
     80     
     81     <property name="new" value="newpackage"></property>
     82     <target name="mknew">
     83         <mkdir dir="${new}"/>
     84     </target>
     85     <description>
     86         解压文件  src="${hello}/package.zip"指定文件的位置  dest="${new}" 指定解压到哪个目录下
     87     </description>
     88     <target name="unzipfile" depends="mknew">
     89         <unzip dest="${new}" overwrite="true" src="${hello}/package.zip" ></unzip>
     90     </target>
     91     
     92     <property name="replacefile" value="input.txt"></property>
     93     <description>
     94         summary="on" 属性设置为true或者on 就可以输出找到和替换字符串实例的数目
     95     </description>
     96     <target name="replacewords" description="替换文件中替换字符串">
     97         <replace file="${replacefile}" token="l" value="替换" summary="on"></replace>
     98     </target>
     99     
    100     
    101     
    102     
    103     
    104     <description>
    105         模式匹配 
    106 (当前目录)        src*/*.java 将匹配带src前缀的任意数目的目录的所有java文件
    107 (当前目录包括其子目录)        还有一种模式结构:**,它匹配任意数目的目录 例如模式 **/*.java将匹配当前目录下的所有java文件
    108     </description>
    109     <property name="dangqian" value="src"></property>
    110     <target name="copyjavafile" description="把src目录下的所有java文件全都拷贝到pro目录下">
    111         <copy todir="${hello}">
    112             <fileset dir="${dangqian}">
    113                 <include name="**/*.java"/>
    114             </fileset>
    115         </copy>
    116         
    117     </target>
    118     
    119     
    120     <description>
    121         ant自定义任务
    122     </description>
    123     <taskdef name="myFileSortExamole" classname="MyOwn.FileSorter" classpath="bin"> 
    124     </taskdef>
    125     
    126     <target name="FileSort">
    127         <myFileSortExamole srcFile="input.txt" destFile="output.txt">
    128         </myFileSortExamole>
    129     </target>
    130     
    131     
    132     
    133     
    134 </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方法。

     1 package MyOwn;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.BufferedWriter;
     5 import java.io.File;
     6 import java.io.FileReader;
     7 import java.io.FileWriter;
     8 import java.util.ArrayList;
     9 import java.util.Collections;
    10 import java.util.List;
    11 import java.util.ListIterator;
    12 
    13 import org.apache.tools.ant.BuildException;
    14 import org.apache.tools.ant.Task;
    15 /**
    16  * @author Tai
    17  * 自定义ant功能,文件中的没一行排序
    18  * srcFile destFile 再ant中定义好之后会自动掉set方法 这里就会有值了
    19  */
    20 public class FileSorter extends Task
    21 {
    22     
    23     private File srcFile;
    24     private File destFile;
    25     public File getSrcFile()
    26     {
    27         return srcFile;
    28     }
    29     public void setSrcFile(File srcFile)
    30     {
    31         this.srcFile = srcFile;
    32     }
    33     public File getDestFile()
    34     {
    35         return destFile;
    36     }
    37     public void setDestFile(File destFile)
    38     {
    39         this.destFile = destFile;
    40     }
    41     
    42     @Override
    43     public void execute() throws BuildException
    44     {
    45         try
    46         {
    47             BufferedReader fromFile = new BufferedReader(new FileReader(srcFile));
    48             BufferedWriter toFile = new BufferedWriter(new FileWriter(destFile));
    49             String line = fromFile.readLine();
    50             List<String> list = new ArrayList<String>();
    51             while(line != null)
    52             {
    53                 list.add(line);
    54                 line = fromFile.readLine();
    55             }
    56             Collections.sort(list);
    57             
    58             for (ListIterator<String> li = list.listIterator();li.hasNext();)
    59             {
    60                 String str = li.next();
    61                 toFile.write(str);
    62                 toFile.newLine();
    63             }
    64             
    65             toFile.close();
    66             fromFile.close();
    67             
    68         } catch (Exception e)
    69         {
    70             e.printStackTrace();
    71         }
    72         
    73     }
    74     
    75     
    76 }
    FileSorter

    上面是自己定义的文件按照每行排序的task  下面是再XML中使用它。

    120     <description>
    121         ant自定义任务
    122     </description>
    123     <taskdef name="myFileSortExamole" classname="MyOwn.FileSorter" classpath="bin"> 
    124     </taskdef>
    125     
    126     <target name="FileSort">
    127         <myFileSortExamole srcFile="input.txt" destFile="output.txt">
    128         </myFileSortExamole>
    129     </target>
  • 相关阅读:
    java数的相加
    读大道至简第二章有感
    读大道至简第一章有感
    课题的跨专业组队
    返回一个整数数组中最大子数组的和。
    《构建之法》阅读笔记02
    单元测试(2)
    软件工程个人作业03
    单元测试
    团队
  • 原文地址:https://www.cnblogs.com/mauiie/p/3752364.html
Copyright © 2020-2023  润新知