一、Ant介绍

Ant是Java的生成工具,是Apache的核心项目;直接在apache官网下载即可;

Ant类似于Unix中的Make工具,都是用来编译、生成;

Ant是跨平台的,而Make不能;

Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac、java、创建目录、复制文件等功能,所以可以直接点击Ant文件,即可编译生成你的项目;

下载地址: http://ant.apache.org/bindownload.cgi

二、Ant配置

在Ant安装之前需要安装好JDK,并配置好JAVA_HOME;

Ant配置:

1.新建环境变量ANT_HOME:值为ANT的主目录;

2.在path中配置%ANT_HOME%/bin

配置完成之后,打开命令行,输入ant,当出现:

Buildfile: build.xml does not exist!
Build
failed

时说明配置完成;

三、Ant入门

ant的默认生成文件为build.xml;输入ant后,ant会在当前目录下搜索是否有build.xml,如果有,则执行;当然也可以自定义生成文件,通过ant -f
a.xml
即可指定a.xml为生成文件;

ant的生成文件是xml文件,整体结构为:

  1. <?xml version="1.0" encoding="GBK"?>
  2. <project default=" targetname">
  3. <target name="name">
  4. </target>
  5. </project>
<?xml version="1.0" encoding="GBK"?>
<project default=" targetname">
    <target name="name">
    </target>
</project>

project是生成文件的根元素,表示一个工程;

target是project的子元素,表示一个任务;一个project中可以定义多个target元素,表示多个任务;

default属性表示默认执行的target,如果ant命令没有指定target,则执行default的target;

ant targetname;则会执行此target,而忽略default设置的target;

注意:不能有两个相同的targetname;

代码举例:创建并删除hello目录;

  1. <?xml version="1.0" encoding="gbk"?>
  2. <project default="delete">
  3. <property name="name" value="xiazdong"/>
  4. <target name="delete" depends="mkdir">
  5. <delete dir="${name}"/>
  6. </target>
  7. <target name="mkdir">
  8. <mkdir dir="${name}"/>
  9. </target>
  10. </project>
<?xml version="1.0" encoding="gbk"?>
<project default="delete">
  <property name="name" value="xiazdong"/>
  <target name="delete" depends="mkdir">
   <delete dir="${name}"/>
  </target>
  <target name="mkdir">
   <mkdir dir="${name}"/>
  </target>
</project>

四、Ant的XML元素详解

1.<project>元素

是Ant生成文件的根元素;一般形式如:

<project default="    "[ basedir="." ] [name="projectname"]>

default的值是默认执行的target名;

basedir是指定基准目录,一般都是basedir="."

name是指工程名字;

2.<target>元素

是project元素的子元素,在project元素中能够有多个target;一般形式如下:

<target name="    "  [ depends="  A  "]  [ if ="  prop1 "] [ unless=" prop2"]>

</target>

name表示target的名称;

depends中填写其他target名称(可以有多个名称,用逗号分割),表示只有targetA完成之后才能够做此target,如果执行此target,则会先执行A;

if的值表示一个属性名,只有设置了该属性名,才能执行此target;

unless的值表示一个属性名,只有没有设置该属性名,才能执行此target;

3.<property>元素

是project的子元素;property用于定义属性,一般形如:

(1)<property name="  pname  "   value="  pvalue   "/>

如果要使用此property,则需要${pname};类似于表达式语言;

(2)<property file="a.properties"/>通过此属性文件导入属性;

如果单纯想使用$,则通过$$表示;

五、Task介绍

在Ant中Task是target的子元素,即一个target中可以有多个task;而Task分为:

(1)核心Task;

(2)可选Task;

(3)自定义Task;

下面介绍一些常用的核心Task;

1.<echo>

用于单纯输出,一般形如:

<echo>      </echo>

举例:<echo>hello</echo>

2.<javac>

用于编译java文件,一般形式如下:

<javac srcdir="  src   "       destdir="  class   "  [classpath="     "]/>

srcdir是编译此文件夹下或子文件夹下的全部java文件;

destdir是编译后的class文件放置路径;

classpath指定第三方类库;

3.<java>

运行java类,一般形式如下:

<Javaclassname="    " fork="yes">

    【<arg line="param1   param2   param3"/>】

</java>

classname用于指定运行的类名称;

fork="yes"表示另起一个JVM来执行java命令,而不是中断ANT命令,因此fork必须为yes

4.<jar>

打包成jar包;一般形式如下:

<jar destfile="  main.jar" basedir="    ">

<manifest>

        <attribute name="Main-Class"   value="classname"/>    <!--指定主类-->

    </manifest>

</jar>

destfiie的值为jar包的名称;一般为${dest}/main.jar

basedir的值是需要打成jar包的目录;一般为${classes}

manifest表示设置META-INF;

5.<mkdir>

创建目录,可以多层创建,比如a\b\c,则可以连续创建,一般形式如下:

<mkdir dir="a\b"/>

6.<delete>

删除目录,一般形式如下:

<delete dir="a\b"/> 可以删除a目录下的b目录;

<delete file="1.txt"/>可以删除文件;

7.<tstamp>

时间戳,一般形式如下:

<tstamp />

接下来可以使用${DSTAMP}进行调用当前时间;

8.<copy>

复制文件,一般形式如下:

<copy file="file1" tofile="file2"/>

file是源文件;

tofile是目标文件;

9.<move>

移动文件,一般形式如下:

<move file="file1" tofile="file2"/>

file是源文件;

tofile是目标文件;

10.<replace>

用于替换字符串,类似于String的replace操作,一般形式如下:

<replace file="filename" token="old" value="new"/>

file表示要执行替换的文件;

token表示被替换的字符串;

value表示替换的字符串;

代码举例:一般项目中的ant结构

  1. <project default="init">
  2. <property name="src" value="src"/>
  3. <property name="classes" value="classes"/>
  4. <property name="dest" value="dest"/>
  5. <path id="classpath">
  6. <pathelement path="${classes}"/>
  7. </path>
  8. <target name="help">
  9. <echo>help -打印帮助信息</echo>
  10. <echo>compile -编译java源文件</echo>
  11. <echo>run -运行程序</echo>
  12. <echo>build -打成jar包</echo>
  13. <echo>clean -清楚全部编译生成文件</echo>
  14. </target>
  15. <target name="compile">
  16. <delete dir="${classes}"/>
  17. <mkdir dir="${classes}"/>
  18. <javac srcdir="${src}" destdir="${classes}"/>
  19. </target>
  20. <target name="run" depends="compile">
  21. <java classname="org.xiazdong.Test" fork="yes">
  22. <classpath path="${classes}"/>
  23. </java>
  24. </target>
  25. <target name="build" depends="run">
  26. <delete dir="${dest}"/>
  27. <mkdir dir="${dest}"/>
  28. <jar destfile="${dest}/Test.jar" basedir="${classes}">
  29. <manifest>
  30. <attribute name="Main-Class" value="org.xiazdong.Test"/>
  31. </manifest>
  32. </jar>
  33. </target>
  34. <target name="clean">
  35. <delete dir="${classes}"/>
  36. <delete dir="${dest}"/>
  37. </target>
  38. </project>
<project default="init">
  <property name="src" value="src"/>
  <property name="classes" value="classes"/>
  <property name="dest" value="dest"/>
  <path id="classpath">
   <pathelement path="${classes}"/>
  </path>
  <target name="help">
   <echo>help -打印帮助信息</echo>
   <echo>compile -编译java源文件</echo>
   <echo>run -运行程序</echo>
   <echo>build -打成jar包</echo>
   <echo>clean -清楚全部编译生成文件</echo>
  </target>
  <target name="compile">
   <delete dir="${classes}"/>
   <mkdir dir="${classes}"/>
   <javac srcdir="${src}" destdir="${classes}"/>
  </target>
  <target name="run" depends="compile">
   <java classname="org.xiazdong.Test" fork="yes">
     <classpath path="${classes}"/>
   </java>
  </target>
  <target name="build" depends="run">
   <delete dir="${dest}"/>
   <mkdir dir="${dest}"/>
   <jar destfile="${dest}/Test.jar" basedir="${classes}">
     <manifest>
      <attribute name="Main-Class" value="org.xiazdong.Test"/>
     </manifest>
   </jar>
  </target>
  <target name="clean">
   <delete dir="${classes}"/>
   <delete dir="${dest}"/>
  </target>
</project>

总结一下:

  1. <?xml version = "1.0" encoding="GBK"?>
  2. <project name="Test" default="" basedir=".">
  3. <property name="src" value="${basedir}\src"/>
  4. <property file="${basedir}\a.properties"/>
  5. <!--
  6. path用法
  7. 1.id属性表示编号,用于被引用
  8. -->
  9. <path id="classpath">
  10. <!--
  11. pathelement的用法
  12. 1.path表示多个目录,用“;”隔开目录
  13. 2.location表示一个目录
  14. -->
  15. <pathelement path="lib;src"/>
  16. <pathelement location="lib"/>
  17. <!--
  18. dirset的用法
  19. 1.dir属性指定根目录
  20. 2.子元素<include name="    "/>表示包含的目录
  21. 3.子元素<exclude name="    "/>表示不包含的目录
  22. -->
  23. <dirset dir="lib">
  24. <include name="**/*Test*"/>
  25. <exclude name="**/class"/>
  26. </dirset>
  27. <!--
  28. filelist的用法
  29. 1.dir属性指定根路径
  30. 2.files属性指定文件名的列表,用","隔开
  31. -->
  32. <filelist dir="lib" files="a.xml,b.xml"/>
  33. <!--
  34. fileset用法
  35. 1.dir属性指出根路径
  36. 2.子元素<include name="   "/>指定包含的文件名
  37. -->
  38. <fileset dir="lib">
  39. <include name="**/*.jar"/>
  40. </fileset>
  41. </path>
  42. <!--
  43. target用法
  44. 1.表示任务,子元素为各种task的集合;
  45. -->
  46. <target name="target1">
  47. <!--
  48. javac用法
  49. 1.srcdir表示java文件的目录
  50. 2.destdir表示class文件的保存目录
  51. -->
  52. <javac srcdir="src" destdir="bin">
  53. <!--
  54. classpath用法
  55. 1.refid引用前面的path指定的路径
  56. -->
  57. <classpath refid="classpath"/>
  58. </javac>
  59. <!--
  60. java用法
  61. 1.classname表示要运行的类
  62. 2.fork="yes"一定要写上!!
  63. -->
  64. <java classname="Test" fork="yes">
  65. <classpath refid="classpath"/>
  66. <!--
  67. arg表示指定的参数
  68. -->
  69. <arg value="a b c"/>
  70. </java>
  71. <!--
  72. echo表示输出
  73. -->
  74. <echo>Hello world</echo>
  75. <!--
  76. copy表示复制文件
  77. delete表示删除文件
  78. mkdir表示创建目录
  79. move表示移动文件
  80. -->
  81. <copy file="src.txt" tofile="dest.txt"/>
  82. <delete dir="src"/>
  83. <mkdir dir="src"/>
  84. <move file="src.txt" tofile="dest.txt"/>
  85. </target>
  86. </project>
<?xml version = "1.0" encoding="GBK"?>
<project name="Test" default="" basedir=".">
  <property name="src" value="${basedir}\src"/>
  <property file="${basedir}\a.properties"/>
  <!--
  path用法
   1.id属性表示编号,用于被引用
  -->
  <path id="classpath">
  <!-- 
  pathelement的用法
   1.path表示多个目录,用“;”隔开目录  
   2.location表示一个目录
  -->
   <pathelement path="lib;src"/>
   <pathelement location="lib"/>
  <!--
  dirset的用法
   1.dir属性指定根目录
   2.子元素<include name="    "/>表示包含的目录
   3.子元素<exclude name="    "/>表示不包含的目录
  -->
   <dirset dir="lib">
     <include name="**/*Test*"/>
     <exclude name="**/class"/>
   </dirset>
  <!--
  filelist的用法
   1.dir属性指定根路径
   2.files属性指定文件名的列表,用","隔开
  -->
   <filelist dir="lib" files="a.xml,b.xml"/>
  <!--
  fileset用法
   1.dir属性指出根路径
   2.子元素<include name="   "/>指定包含的文件名
  -->
   <fileset dir="lib">
     <include name="**/*.jar"/>
   </fileset>
  </path>
  <!--
  target用法
   1.表示任务,子元素为各种task的集合;
  -->
  <target name="target1">
  <!--
  javac用法
   1.srcdir表示java文件的目录
   2.destdir表示class文件的保存目录
  -->
   <javac srcdir="src" destdir="bin">
  <!--
  classpath用法
   1.refid引用前面的path指定的路径
  -->
     <classpath refid="classpath"/>
   </javac>
  <!--
  java用法
   1.classname表示要运行的类
   2.fork="yes"一定要写上!!
  -->
   <java classname="Test" fork="yes">
     <classpath refid="classpath"/>
  <!--
   arg表示指定的参数
  -->
     <arg value="a b c"/>
   </java>
  <!--
  echo表示输出
  -->
   <echo>Hello world</echo>
  <!--
  copy表示复制文件
  delete表示删除文件
  mkdir表示创建目录
  move表示移动文件
  -->
   <copy file="src.txt" tofile="dest.txt"/>
   <delete dir="src"/>
   <mkdir dir="src"/>
   <move file="src.txt" tofile="dest.txt"/>
  </target>
</project>

五、在Eclipse中使用Ant

在Eclipse中虽然没有内置创建Ant的生成文件,但是可以通过配置完成;

(1)点击  window-->preferences-->editors-->file associations;

(2)在File types中创建一个build.xml,并将associated editor的默认项设置为ant editor即可;

当在项目中创建一个build.xml时,这个文件就是ant的生成文件;

六、模式匹配

在Ant中有一些基本的模式匹配的功能,比如:

*表示任意字符串,**表示任意数量的目录;

(1)*.java,表示任意的java文件;

(2)*/*.java表示当前目录的任意java文件;

(3)**/*.java表示当前目录结构下的任意java文件;

<fileset dir="   src  ">

<include name="**/*.java"/>

<include name="**/*.txt"/>

<exclude name="**/*Test*"/>

</fileset>

表示包含src目录下的所有java和txt文件,排除文件名包含Test的文件;

举例:将java文件拷贝到dest文件夹下;

  1. <copy todir="dest">
  2. <span style="white-space:pre">  </span><fileset dir=".">
  3. <span style="white-space:pre">      </span><include name="**/*.java"/>
  4. <span style="white-space:pre">  </span></fileset>
  5. </copy>
<copy todir="dest">
  <fileset dir=".">
    <include name="**/*.java"/>
  </fileset>
</copy>

七、自定义任务

自定义任务类似于JSP中的自定义标签;

步骤:

(1)继承org.apache.tools.Task;

(2)覆写public void execute()throws BuildException;

(3)在类中添加的属性即为任务标签的属性;

(4)在build.xml中声明任务<taskdef name="   "   classname="    "   classpath="bin"/>

举例:复制文件;

  1. package org.tools;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.PrintWriter;
  9. import org.apache.tools.ant.BuildException;
  10. import org.apache.tools.ant.Task;
  11. public class SimpleTask extends Task{
  12. private File file;
  13. private File tofile;
  14. public File getFile() {
  15. return file;
  16. }
  17. public void setFile(File file) {
  18. this.file = file;
  19. }
  20. public File getTofile() {
  21. return tofile;
  22. }
  23. public void setTofile(File tofile) {
  24. this.tofile = tofile;
  25. }
  26. @Override
  27. public void execute() throws BuildException {
  28. try {
  29. PrintWriter out = new PrintWriter(new FileWriter(tofile));
  30. BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
  31. String line = null;
  32. while((line=in.readLine())!=null){
  33. out.println(line);
  34. }
  35. out.close();
  36. in.close();
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }
package org.tools;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
 
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
public class SimpleTask extends Task{
 private File file;
 private File tofile;
 public File getFile() {
  return file;
 }
 public void setFile(File file) {
  this.file = file;
 }
 public File getTofile() {
  return tofile;
 }
 public void setTofile(File tofile) {
  this.tofile = tofile;
 }
 @Override
 public void execute() throws BuildException {
  try {
   PrintWriter out = new PrintWriter(new FileWriter(tofile));
   BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
   String line = null;
   while((line=in.readLine())!=null){
    out.println(line);
   }
   out.close();
   in.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
 }

}

build.xml

  1. <taskdef name="MyCopy" classname="org.tools.SimpleTask" classpath="bin"></taskdef>
  2. <target name="mycopy">
  3. <MyCopy file="2.txt" tofile="output.txt"/>
  4. </target>
<taskdef name="MyCopy" classname="org.tools.SimpleTask" classpath="bin"></taskdef>
  <target name="mycopy">
   <MyCopy file="2.txt" tofile="output.txt"/>
  </target>

Ant入门的更多相关文章

  1. ant入门程序

    一. ant简单介绍 Ant是apache的一个核心项目, 它的作用是项目自己主动化构建, 由于它内置了Javac.Java.创建文件夹.拷贝文件等功能, 直接执行build.xml文件就能够编译我们 ...

  2. ANT入门&用ANT编译java项目

    第一次接触ant是15年在无锡某软件公司实习时,当时的项目是由多个模块组成,开发分成模块开发的几个小组.为了提高开发效率,采用这种编译项目的方法. 最近接触到flex项目,采用eclipse自动编译的 ...

  3. Ant 入门

    参考: Ant官网     http://ant.apache.org/ 轻量级java ee企业应用实战(李刚)      Ant当前版本1.9.6      Ant基于Java     配置环境变 ...

  4. Ant:Ant 入门

    背景 自从有了 Maven 以后,Ant 视乎就不流行了,不过 Ant 还是有其应用场景的,Ant 的思想比较简洁,如下: 一个 project 包含多个 target(类似成员方法). 一个 tar ...

  5. Ant入门使用说明

    一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.在实际软件开发中,有很多地方可以用到ant. 开发环境: 复制代码 代码如下: S ...

  6. Ant入门之引用外部jar文件

    笔者在java项目开发中经常遇到引用外部Jar包的情况,使用ant打包过程中需要对其引用.现在此简单记忆以飨来者. 此处引用Log4j,具体程序HelloLog4j.java: package oat ...

  7. Ant入门: Hello World with Apache Ant

    笔者因项目需要进行java程序打包,之前一直使用的最多的打包工具要数fat-jar了.此工具将所有引用的jar包以及源码生成的class一起打到一个包里面,运行程序的时候直接运行命令:java –ja ...

  8. 《Ant权威指南》笔记(一)

    Ant的由来(序) James Duncan Davidson当年用纯Java开发Tomcat的时候,不仅想让它跨平台运行,还想要在不同的操作系统上都能够进行开发和构建.这种较大的项目的编译构建过程是 ...

  9. (转载)Ant教程

    ant教程(一) 写在所有之前 为了减少阅读的厌烦,我会使用尽量少的文字,尽量明白的表达我的意思,尽我所能吧.作为一个学习者,在我的文章中会存在各种问题,希望热心人指正.目录大概是这样 ant教程 ( ...

随机推荐

  1. android菜鸟学习笔记29----Android应用向用户发送提示信息的方式总结

    常见的向用户发送提示信息的方式有3种,分别为: 1)发送Toast信息 2)弹出对话框 3)发送通知 总结如下: 方式1:发送Toast信息: 这种方式最简单,在之前的学习中多次使用过.Toast是在 ...

  2. PHP 获得域控内用户的计算机登录名

    一个需求: 在域控范围获得访问用户的计算机名.方法: 1.测试软件环境: XAMPP Control Panel V3.2.1 ,  Apache version 2.4.7 2.Apache 2.2 ...

  3. 2015-03-06——ajax基础

    IE6  必须使用Microsoft.XMLHTTP ActiveX组件来实例化一个对象 IE7已实现了XMLHttpRequest对象 var request = new ActiveXObject ...

  4. 如何使用模板生成 sqlite3 sql 创建语句?

    template<typename T,typename... Args> std::string createTable(T tableName,Args&&... ar ...

  5. Linux运维-zabbix_agent最新版的yum安装

    agentd端可以直接使用yum来进行安装 rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1. ...

  6. Android系统移植与调试之------->如何修改开机动画的两种方式剖析

    首先,我们先来分析一下源码: frameworks/base/cmds/bootanimation/BootAnimation.cpp 首先看一下定义的常量: BootAnimation::ready ...

  7. Python通过fork的方式防止僵尸进程

    import subprocess import os import sys import platform def fock_new(func): def inner(*args, **kwargs ...

  8. 修改Linux的基本配置(修改主机名修改ip地址安装JDK/Tomcat/MySQL等等)

    (一)基本操作修改 修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=server1.itcast.cn 修改ip地址 vi /etc/s ...

  9. Oracle学习笔记—常用函数

    这里记录一些oracle常用的函数. TO_NUMBER()函数 将字符串类型转换成一个 number 类型的值. SELECT TO_NUMBER('100.00') FROM DUAL; TO_C ...

  10. mysql学习笔记—常用sql语句

    sql注意事项: SQL 对大小写不敏感:SELECT 与 select 是相同的 某些数据库系统要求在每条 SQL 语句的末端使用分号. CREATE DATABASE CREATE DATABAS ...