一本Ant详细的书:<Ant开发及整合应用详解>
http://book.csdn.net/bookfiles/379/index.html
Ant中copy操作学习心得
Appfuse的第一个ant命令是ant new,其任务是建立一个新命名的project,少不了会复制很多文件。build.xml中也有很多copy操作,为了搞清楚ant new到底干了些什么事,还是先把copy操作了解一下。看了会ant的DOCS,网上也找了些文章,发现copy这部分都是一带而过,讲得很浅,于是我就只有自己实验下,发现还有点收获。 ant版本为1.6.5。
1. 拷贝单个文件到指定目录下。
例:<copy todir="${basedir}/new" file="${basedir}/old/old1.txt1">
将${basedir}/old/old.txt文件拷贝到${basedir}/new下
2. 拷贝一批文件到指定目录下
例:<copy todir="${basedir}/new">
<fileset dir="${basedir}/old">
<include name="old1.txt" />
<include name="old2.txt" />
<exclude name="old8.txt" />
</fileset>
</copy>
这里fileset定义的是原文件的组成形式,<include/>子属性表示包括,<exclude/>子属性表示排除,很简单,通过他们组合实现多文件的筛选,当然我这个例子用得很傻。比如
<include name="appgen/**"/>
<include name="ibatis/**"/>
<exclude name="**/*.log"/>
拷贝appget目录和ibatis目录下除了.log文件以外的其它所有文件和子目录。
可以把<fileset/>简写成<fileset dir="${basedir}/old" includes="old1.txt,old2.txt" />,includes可以理解成include的复数形式,包含多个文件时用逗号隔开,excludes也一样。
3. 拷贝一个目录到指定目录下
例:<copy todir="${basedir}/new">
<fileset dir="${basedir}/old">
<include name="appgen" />
<include name="appgen/" />
<include name=appgen/**" />
<include name="appgen/***" />
</fileset>
</copy>
同样使用<fileset/>属性,name指定目录名,不过这里要分两种情况,用<include/>子属性和不用<include/>子属性.
若使用<include/>, 又要分三种情况
若是“appgen”,则只会拷贝名为appgen的空目录过去,它里面的文件和子目录则不会拷贝。
若是“appgen/”,或“appgen/**”,则会把整个appgen目录拷贝过去,包括里面的文件和子目录。
若是“appgen/*”,则只会把该目录和该目录下第一级子目录的所有东西拷贝过去,而不会拷贝第二级和第二级以下的。注:“appgen/*”这儿是一个*号,*号若大于两个,也跟一个*号是同样效果。比如“appgen/*”和“appgen/****”都只拷贝appgen目录下第一级子目录。
注:若appeng这个目录本身就是个空目录,无论怎么写,这个空目录都不会被拷贝。也就是说,copy操作不会产生创建空目录的作用,要想创建空目录,只有用mkdir。
若不使用任何<include>属性,如
<fileset dir="${basedir}/old">
</fileset>
则会拷贝${basedir}/old下的所有文件和子目录。
注:使用<exclude/>排除目录时,目录名必须写成“appgen/”或“appgen/**”形式,否则不会生效。
以上是三种拷贝到目录的种类,注意如果计算机中没有todir指定的路径,ant将会自动创建这个路径。
4. 拷贝单个的文件:
〈copy tofile="old.txt" file="new.txt" /〉就这么简单就行了。
当然也可以写成
<copy tofile="${basedir}/new/new.txt">
<fileset dir="${basedir}/old" includes="old.txt" />
</copy>
这里includes就只能写一个文件,不能写上多个文件,因为不能将多个文件复制到一个文件中去,所以这样麻烦的写法是没有意义的。
复制肯定还要涉及到同名覆盖的问题,ant在copy类的API中说明:Files are only copied if the source file is newer than the destination file,这里的newer是指文件的修改时间,即使你在修改时文件内容没有任何变化,只是导致修改时间变了,ant同样会覆盖同名文件,也就是说,ant不会检查文件内容。
对于是复制目录的情况,由于目录没有修改时间,ant还是通过检查目录内文件的修改时间来决定是否覆盖的,若目录内某文件修改时间有变化,则会覆盖这个文件,而不是整个目录。
如果要强行覆盖,<copy/>有个overwrite属性,默认为false,改成true就行了。
Delete Task:对文件和目录进行删除
Delete 任务可用于删除一个或多个文件,或删除一个或多个目录和目录下的文件。默认时不会删除空目录,要删除空目录可以设定includeEmptyDirs属性为true。在Delete任务中可以使用FileSet和DirSet类型。
4.6.1 Delete Task的属性及功能
Delete任务包括以下属性:
(1)file:用于指定要删除的文件的名称,可以为相对路径或绝对路径。
(2)dir:指定一个将要被删除的根目录。这个目录下的子目录及文件将可能被删除。dir属性和file属性两者必须指定其一。
(3)verbose:作用是指定是否在命令行中输出被删除的文件的名称。默认为false。
(4)quiet:作用是指定当要被删除的文件或目录不存在时是否不显示提示信息。默认为false,代表要显示提示信息。
(5)failonerror:用于指定当出现错误时是否停止执行命令。
(6)includeemptydirs:表明当使用FileSet类型时是否删除空的目录。
(7)includes:用于指定将要删除的文件或目录的模式。可用逗号或空格符进行分隔。
(8)includesfile:用于指定要删除的文件的模式。已不建议使用。
(9)excludes:用于指定一个或多个文件模式或目录模式。这些符合条件的文件和目录将不被删除。
(10)excludesfile:用于指定将不被删除的文件模式,已不建议使用。
(11)defaultexcludes:用于指定是否使用Ant默认的default excludes模式,已不建议使用。
(12)deleteonexit:用于指定是否采用Java File类中的deleteOnExit()方法进行判断,如果使用这个方法,那么仅当存在文件时才进行删除,默认取值为false。
4.6.2 在执行Delete Task时使用文件过滤的实例
(1)删除单个文件的实例:
<delete file="/lib/ant.jar"/>
这个例子的作用是删除lib目录下的ant.jar文件。
(2)删除目录的实例:
<delete dir="lib"/>
这个例子的作用是删除lib目录,包括这个目录的所有子目录及文件,可以通过include或exclude类型指定删除的部分文件,而不是目录下的所有文件。
(3)删除所有备份文件和空的目录的例子:
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.bak"/>
</delete>
这个例子的作用是删除当前目录以及其子目录下的所有.bak文件,同时也删除所有空的目录。
Ant Delete 如何只删掉文件夹下所有文件和文件夹
用fileset 来过滤要删掉的目录和文件
<delete verbose="true" includeemptydirs="true">
<fileset dir="${buildDir}">
<include name="**/*"/>
</fileset>
</delete>
注:includeemptydirs 的意思是就算文件夹是空的,也同样删除。
这样就会避免使用像
<delete dir="build"></delete>
这样就会把build文件夹以及下面的所有子目录一起删掉。
很多时候父目录是没有必要每次都删了重建的,只要清空这个文件夹就好了。
常用到的模版:
xml version="1.0" encoding="UTF-8"?>
<!-- name:对应工程的名字;default:需要的缺省任务(运行"ant"不指明任务时执行的任务) -->
<project name="WebTest" default="dist" basedir=".">
<property name="appName" value="WebTest"/>
<property name="src.dir" value="src"/>
<property name="lib.dir" value="lib"/>
<property name="dist.dir" value="dist"/>
<property name="classes.dir" value="bin"/>
<property name="webapps.dir" value="D:/jakarta-tomcat-5.0.28/webapps/WebTest"/>
<property name="webroot.dir" value="WebRoot"/>
<property name="config.dir" value="config"/>
<path id="compile.classpath">
<pathelement location="${classes.dir}"/>
<fileset dir="${lib.dir}" includes="**/*.jar" />
path>
<target name="clean" description="Delete old build and dist directories">
<delete dir="${clesses.dir}"/>
<delete dir="${dist.dir}"/>
<delete dir="${webapps.dir}"/>
target>
<target name="prepare">
<mkdir dir="${classes.dir}"/>
<mkdir dir="${dist.dir}"/>
target>
<target name="compile" depends="prepare" description="Compile java sources">
<javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true">
<classpath refid="compile.classpath"/>
javac>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<include name="**/*.xml"/>
<include name="**/*.properties" />
fileset>
copy>
target>
<target name="deploy" depends="compile" description="Deploy application to servlet container">
<mkdir dir="${webapps.dir}"/>
<copy todir="${webapps.dir}">
<fileset dir="${webroot.dir}"/>
copy>
<mkdir dir="${webapps.dir}/WEB-INF/classes"/>
<copy todir="${webapps.dir}/WEB-INF/classes">
<fileset dir="${classes.dir}" >
<include name="**/**" />
fileset>
copy>
<mkdir dir="${webapps.dir}/WEB-INF/lib"/>
<copy todir="${webapps.dir}/WEB-INF/lib">
<fileset dir="${lib.dir}" includes="*.jar" />
copy>
<copy todir="${webapps.dir}/WEB-INF/">
<fileset dir="${config.dir}"/>
copy>
target>
<target name="dist" depends="clean,deploy" description="Create binary destribution">
<jar jarfile="${dist.dir}/${appName}.war" basedir="${webapps.dir}"/>
target>
<target name="javadoc" depends="compile" description="Create Javadoc API documentation">
<mkdir dir="${dist.dir}/docs/api"/>
<javadoc sourcepath="${src.dir}" destdir="${dist.dir}/docs/api" packagenames="duzn.ant.test.*"/>
target>
project>
分享到:
相关推荐
标题 "ANT学习心得【第一部分】" 暗示了我们即将探讨的是Apache Ant,一个广泛使用的Java构建工具。在Java开发中,Ant是管理项目编译、打包、测试等任务的重要工具,它通过XML配置文件来定义构建过程。这篇博文可能...
《ANT使用详细总结与心得》 ANT,全称Apache Ant,是一个Java库和命令行工具,其任务是驱动构建过程。它的设计目标是推动软件项目的构建过程自动化,尤其是在Java环境中。ANT以其灵活性和可扩展性著称,通过XML格式...
首先,"ant使用指南.pdf"和"ant使用教程.pdf"提供了基础的ANT操作指导,包括如何配置构建文件(build.xml),如何定义任务(tasks),以及如何管理项目依赖。这两份文档通常会讲解ANT的基本概念,如目标(targets)...
《Maven学习心得》 Maven,作为Apache推出的一款强大的构建和工程管理工具,与ANT相比,具有显著的优势。本文将深入探讨Maven的核心特点、优势以及存在的问题,以供学习参考。 首先,Maven的一大亮点在于其对第三...
- **操作系统**: Windows 或 Linux (推荐使用Windows进行学习) - **Java Development Kit (JDK)**: JDK 1.5.0_07 版本 - **Apache Ant**: apache-ant-1.6.5 - **Integrated Development Environment (IDE)**: ...
【Maven 心得与详解】 Maven 是一个由 Apache 开发的 Java 项目管理工具,主要用于构建、依赖管理和项目信息管理。它以其强大的自动化构建能力、约定优于配置的原则、跨平台支持以及丰富的插件生态,深受广大开发者...
【开发心得-3180103772-张溢弛1】 在这个物联网应用网站的开发过程中,张溢弛同学经历了四个主要阶段:技术选型与系统设计、代码开发、测试与收尾以及总结。以下是每个阶段的详细阐述。 1. 技术选型与系统设计阶段...
标题中的“axis1.4 心得”表明我们将探讨的是关于Axis1.4,这是一个较老版本的Apache Axis,一个用于构建Web服务的开源Java框架。Apache Axis1.4是Axis1系列...同时,博主的个人心得也会为实际操作带来宝贵的经验参考。
### IZpack 使用心得 #### 一、IZpack 概述与应用场景 IZpack 是一个开源的安装系统,主要用于将 Java 程序打包成可下载的安装包,并且能够支持在没有预装 JVM 的设备上运行。它提供了一种简单有效的方式来创建跨...
- **使用Ant部署Web项目到Tomcat:** Ant是一个Java编写的构建工具,实训中将学习如何使用Ant自动部署Web项目到Tomcat服务器上。 - **生命周期:** 学习Servlet的初始化、服务和销毁等阶段,理解Servlet在整个请求...
本文旨在总结作者在使用Hibernate过程中的实践经验,并分享一些技巧和心得,希望能够对初次接触或正在学习Hibernate的开发者有所帮助。 #### 二、基础知识 ##### 2.1 库文件配置 在使用Hibernate之前,首先需要...
本文将详细介绍在 Windows 7 系统上搭建 Cordova 开发环境的步骤,以及一些心得体会。 首先,我们需要安装 JDK(Java Development Kit)。JDK 是开发 Java 应用的基础,Cordova 在某些步骤中会用到。可以从 Oracle ...
在描述中提到的“博文链接:https://littleant.iteye.com/blog/904309”,这是一个ITeye博客平台上的文章链接,可能是作者分享SSHD整合的详细步骤和心得。由于描述内容为空,我们无法直接获取更多细节,但可以推测这...
【描述】"SUN工程师800问题经验荟萃"的描述简洁,意味着这可能是一个深入的技术资源,记录了SUN工程师在处理各种故障、性能优化、系统集成、安全问题等方面的心得。这些经验通常涵盖了大量的案例研究,提供了宝贵的...
“欢迎大家下载,共同学习进步”体现了开源和分享的精神,这种资源通常是免费提供的,开发者可以从中学习到实际项目中的设计思路和技巧,也可以在社区中交流心得,提升自己的技能。 【标签】:“后台管理模板”标签...