Ant Ftp Task使用总结

时间:2024.4.29

这里以一个简单、实用的例子来说明FTP task的使用。

<?xml version="1.0" encoding="UTF-8"?>

<project name="FTP" default="sendFilesToFTP" basedir="c:\ant">

<target name="sendFilesToFTP">

<ftp server="10.1.0.243" port="21" userid="dmweb" password="dmweb21" remotedir="/home/dmweb/testD" depends="yes" verbose="yes">

<fileset dir="${basedir}">

<include name="test/*.xml" />

</fileset>

</ftp>

</target>

</project>

红色字体部分的代码,就是一个FTP task,它完成的功能是把本地目录c:\ant下子目录test中的所有更改过的xml文件传送到地址为10.1.0.243的FTP服务器的/home/dmweb/testD目录。

一个FTP task以<ftp></ftp>来表示,<ftp>包含很多属性用于配置任务: server、port属性设置FTP的地址和连接使用的端口。

userid、password属性设置连接FTP时使用到的用户名和密码。

remotedir属性设置要访问的FTP远程目录,如果remotedir没有设置,则默认为FTP上登录用户的默认目录。

depends属性如果设置成yes/true的话,表示只传送更改过的文件,默认值为no/false。

verbose属性如果设置成yes/true的话,在FTP任务执行的时候,会打印出所有传送文件的列表信息,默认值为no/false。

我们发现代码中,并没有指明这个FTP任务是要执行什么操作,但其实这个FTP任务是执行上传操作。FTP task有一个action属性,用于指明执行哪种FTP操作(send, receive, list, delete files, and create directories),当未设置action属性时,默认是执行send(上传)操作,你可以设置这个属性执行你想要的操作。

包含在<ftp>与</ftp>中的filter,大家应该都很熟悉,它与copy任务中filter作用一样,在这里它指定了本地的目录,并说明被传送的文件只包括该目录下test子目录中的所有xml文件。


第二篇:Ant学习总结


Ant学习总结

分类: java 20##-12-04 09:52 224人阅读 评论(0) 收藏 举报

一、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文件,整体结构为:

[html] view plaincopyprint?

1.    <?xml version="1.0" encoding="GBK"?>  

2.    <project default=" targetname">  

3.        <target name="name">  

4.        </target>  

5.    </project>  

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

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

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

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

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

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

[html] view plaincopyprint?

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>  

四、AntXML元素详解

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类,一般形式如下:

<java classname="    " 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结构

[html] view plaincopyprint?

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>  

总结一下:

[html] view plaincopyprint?

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>  

五、在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文件夹下;

[html] view plaincopyprint?

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>  

七、自定义任务

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

步骤:

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

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

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

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

举例:复制文件;

[java] view plaincopyprint?

1.    package org.tools;  

2.      

3.    import java.io.BufferedReader;  

4.    import java.io.File;  

5.    import java.io.FileInputStream;  

6.    import java.io.FileWriter;  

7.    import java.io.IOException;  

8.    import java.io.InputStreamReader;  

9.    import java.io.PrintWriter;  

10.    

11.  import org.apache.tools.ant.BuildException;  

12.  import org.apache.tools.ant.Task;  

13.  public class SimpleTask extends Task{  

14.      private File file;  

15.      private File tofile;  

16.      public File getFile() {  

17.          return file;  

18.      }  

19.      public void setFile(File file) {  

20.          this.file = file;  

21.      }  

22.      public File getTofile() {  

23.          return tofile;  

24.      }  

25.      public void setTofile(File tofile) {  

26.          this.tofile = tofile;  

27.      }  

28.      @Override  

29.      public void execute() throws BuildException {  

30.          try {  

31.              PrintWriter out = new PrintWriter(new FileWriter(tofile));  

32.              BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));  

33.              String line = null;  

34.              while((line=in.readLine())!=null){  

35.                  out.println(line);  

36.              }  

37.              out.close();  

38.              in.close();  

39.          } catch (IOException e) {  

40.              e.printStackTrace();  

41.          }  

42.            

43.      }  

44.        

45.  }  

build.xml

[html] view plaincopyprint?

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>  

更多相关推荐:
asp net 课程设计小结

课程设计小结又过去了一周这次aspnet的课程设计中学习到了很多通过这次的课程设计检验和巩固了我平时所学的知识让我知道了平时学习中的不足教会了我如何去完整地完成简单的系统在设计的过程之中遇见问题是一定的有时候就...

aspnet总结

学习ASPNET我是从VFPASP转型而来的我学习的ASPNET走的是aspnetcSql20xx这条路之前学习VFP时就对数据库是了深刻的了解对CS结构的项目有了大概的认识与体验如今学习ASPNET速度要比他...

asp,net总结

ASPNET程序设计教程第二版总结郑阿奇主编第一章web基础知识1TCPIP协议四个层次应用层传输层网络层物理接口层2IP地址识别Internet网络中的主机及网络设备的唯标识分网络地址和主机地址两部分分为A1...

aspnet软件开发学习总结

asp.net学习经验总结通过几个月的学习,我初步掌握ASP.NET开发平台的基本知识,也通过老师的教学,完成了实际项目中的应用。由于大学学习中打下了较为扎实的C#基础,所以在选择开发平台学习时选择了ASP.N…

asp_net性能优化总结

aspnet性能优化总结1C语言方面11垃圾回收垃圾回收解放了手工管理对象的工作提高了程序的健壮性但副作用就是程序代码可能对于对象创建变得随意111避免不必要的对象创建由于垃圾回收的代价较高所以C程序开发要遵循...

asp.net面试

ASPNET常见面试题及答案ASPNET常见面试题及答案20xx1106135819阅读1056评论1字号大中小1简述privateprotectedpublicinternal修饰符的访问权限答private...

aspnet(C#)网页跳转七种方法小结

responseredirect这个跳转页面的方法跳转的速度不快因为它要走2个来回2次postback但他可以跳转到任何页面没有站点页面限制即可以由雅虎跳到新浪同时不能跳过登录保护但速度慢是其最大缺陷redir...

Asp[1].net+缓存技术总结

提高性能最好最快的办法当然是通过缓存来改善对于任何一个web开发者都应该善用缓存Aspnet下的缓存机制十分强大用好缓存机制可以让我们极大的改善web应用的性能下面是一些总结的缓存的知识点与大家分享交流1页面缓...

aspnet开发网上书店课程的教学做一体化总结

《使用ASP.NET技术开发网上书店》的“教”、“学”、“做”一体化教学总结“教”、“学”、“做”是计算机类课程教学过程中必经的环节,如何在“教”的环节中激发学生的学习兴趣,吸引学生主动参与,突现学生的主体地位…

asp .net聊天室综合实验报告

华北科技学院计算机学院综合性实验实验报告课程名称ASP.NET程序设计实验学期20XX至20XX学年第一学期学生所在系部计算机学院年级12级专业班级计科B123班学生姓名小星星学号**任课教师***实验成绩计算…

NET生产实习报告

.NET生产实习报告洛阳理工学院生产实习报告专业计算机科学与技术班级学号姓名完成日期20XX.10.27无锡NIIT简介NIIT是印度国家信息技术学院的简称,于1981年成立于印度首都新德里,目前已经成为全球最…

aspnet学习路线

如果你已经有较多的面向对象开发经验跳过以下这两步第一步掌握一门NET面向对象语言C或VBNET我强烈反对在没系统学过一门面向对象OO语言的前提下去学ASPNETASPNET是一个全面向对象的技术不懂OO那绝对学...

asp.net总结(9篇)