一个简单的ant应用


<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?

> <project name="hd_services" default="war" basedir="."> <property name="tomcat.home" value="E:\r\apache-tomcat-7" /> <property name="hd.src" value="src" /> <property name="hd.classes" value="build/classes" /> <property name="hd.build" value="build" /> <property name="hd.lib" value="WebContent/WEB-INF/lib" /> <target name="clean"> <delete dir="${hd.build}" /> </target> <path id="lib.path"> <fileset dir="${hd.lib}"> <include name="**/*.jar" /> </fileset> </path> <target name="compile" depends="clean"> <mkdir dir="${hd.classes}" /> <javac srcdir="src" destdir="${hd.classes}" includeantruntime="no" classpathref="lib.path"> <exclude name="tests/**/*.java" /> <!--<include name="**/*.java" />--> </javac> <copy todir="${hd.classes}"> <fileset dir="src"> <include name="config/**/*.properties" /> <include name="config/**/*.xml" /> </fileset> </copy> </target> <target name="war" depends="compile"> <war destfile="${hd.build}/hd_services.war" webxml="WebContent/WEB-INF/web.xml"> <fileset dir="WebContent" includes="**/*.jsp" /> <lib dir="${hd.lib}" /> <classes dir="${hd.classes}" /> </war> </target> <target name="deploy" depends="war"> <copy todir="${tomcat.home}/webapps"> <fileset dir="${hd.build}"> <filename name="*.war"/> </fileset> </copy> </target> </project>





<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义一些变量,就好比在java中定义一些变量,以备以下使用 -->

<!-- 所在项目的位置,。代表项目下,。

项目的子包下 --> <project name="helloworld" basedir="."> <!-- 定义一个属性变量 用作指定项目的原文件所在的文件夹 "${basedir} =basedir="."--> <property name="src.dir" value="${basedir}\src"/> <!-- 环境变量 --> <property environment="env"/> <property name="jboss.home" value="${env.JBOSS_HOME}"/> <property name="jboss.server.config" value="default"/> <!-- 编译 class 存放的文件夹 --> <property name="build.dir" value="${basedir}\build"/> <!-- 引入的jar包 --> <path id="build.classpath"> <fileset dir="${jboss.home}\client"> <include name="*.jar"/> </fileset> <!-- 把自已的 jar文件也引入 --> <pathelement location="${build.dir}"/> </path> <!-- 创建一个文件夹 --> <target name="prepare"> <delete dir="${build.dir}"/> <mkdir dir="${build.dir}"/> </target> <!-- 编译 --> <target name="compile" depends="prepare" description="编译"> <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="on"> <classpath refid="build.classpath"/> </javac> </target> <target name="ejbjar" depends="compile" description="创建ejb公布包"> <jar jarfile="${basedir}\${ant.project.name}.jar"> <fileset dir="${build.dir}"> <include name="**/*.class"/> </fileset> </jar> </target> <!-- 依懒于ejbjar 把编译好的class复制到jboss公布文件夹下--> <target name="deploy" depends="ejbjar" description="公布ejb"> <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/> </target> <target name="undeploy" description="御载ejb"> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/> </target> </project>



Ant的构建文件
当開始一个新的项目时,首先应该编写Ant构建文件。

构建文件定义了构建过程。并被团队开发 中每一个人使用。

Ant构建文件默认名为build.xml,也能够取其它的名字。

仅仅只是在执行的时候 把这个命名当作參数传给Ant。构建文件能够放在不论什么的位置。

一般做法是放在项目顶层文件夹中。

这样能够保持项目的简洁和清晰。以下是一个典型的项目层次结构。

(1) src存放文件。
(2) class存放编译后的文件。
(3) lib存放第三方JAR包。
(4) dist存放打包,公布以后的代码。

Ant构建文件是XML文件。每一个构建文件定义一个唯一的项目(Project元素)。每一个项目下能够定 义非常多目标(target元素),这些目标之间能够有依赖关系。当运行这类目标时。须要运行他们所 依赖的目标。

每一个目标中能够定义多个任务。目标中还定义了所要运行的任务序列。Ant在构建目标时必须调 用所定义的任务。任务定义了Ant实际运行的命令。Ant中的任务能够为3类。

(1) 核心任务。

核心任务是Ant自带的任务。

(2) 可选任务。

可选任务是来自第三方的任务,因此须要一个附加的JAR文件。

(3) 用户自己定义的任务。用户自己定义的任务是用户自己开发的任务。

4标签编辑

1.<project>标签
每一个构建文件相应一个项目。<project>标签时构建文件的根标签。它能够有多个内在属性。 就如代码中所看到的。其各个属性的含义分别例如以下。
(1) default表示默认的执行目标。即指定默认的target(即任务)。这个属性是必须的。

(2) basedir表示项目的基准文件夹。
(3) name表示项目名。
(4) description表示项目的描写叙述。

每个构建文件都相应于一个项目。可是大型项目常常包括大量的子项目,每个子项目都能够有
自己的构建文件。
2.<target>标签
一个项目标签下能够有一个或多个target标签。

一个target标签能够依赖其它的target标签。

例 如,有一个target用于编译程序,还有一个target用于生成可运行文件。在生成可运行文件之前必须先编译该文件,因此可运行文件的target依赖于编译程序的target。Target的全部属性例如以下。

(1).name表示标明,这个属性是必须的。
(2).depends表示依赖的目标。

(3)if表示仅当属性设置时才运行。

(4)unless表示当属性没有设置时才运行。
(5)description表示项目的描写叙述。
Ant的depends属性指定了target的运行顺序。Ant会按照depends属性中target出现顺序依次运行 每一个target。在运行之前。首先须要运行它所依赖的target。程序中的名为run的target的 depends属性compile,而名为compile的target的depends属性是prepare。所以这几个target执 行的顺序是prepare->compile->run。一个target仅仅能被运行一次。即使有多个target依赖于它。

假设没有if或unless属性target总 会被运行。

3.<mkdir>标签
该标签用于创建一个文件夹,它有一个属性dir用来指定所创建的文件夹名,其代码例如以下:
<mkdir dir=”${class.root}”/>
通过以上代码就创建了一个文件夹,这个文件夹已经被前面的property标签所指定。

4<jar>标签
该标签用来生成一个JAR文件。其属性例如以下。

(1) destfile表示JAR文件名称。

(2) basedir表示被归档的文件名称。
(3) includes表示被归档的文件模式。

(4) excludes表示被排除的文件模式。
5.<javac标签>
该标签用于编译一个或一组java文件,其属性例如以下。
(1).srcdir表示源程序的文件夹。
(2).destdir表示class文件的输出文件夹。
(3).include表示被编译的文件的模式。
(4).excludes表示被排除的文件的模式。

(5).classpath表示所使用的类路径

(6).debug表示包括的调试信息。

(7).optimize表示是否使用优化。
(8).verbose 表示提供具体的输出信息。

(9).fileonerror表示当碰到错误就自己主动停止。

6.<java>标签
该标签用来运行编译生成的.class文件。其属性例如以下。
(1).classname 表示将运行的类名。
(2).jar表示包括该类的JAR文件名称。

(3).classpath所表示用到的类路径。
(4).fork表示在一个新的虚拟机中执行该类。
(5).failonerror表示当出现错误时自己主动停止。
(6).output 表示输出文件。
(7).append表示追加或者覆盖默认文件。

7.<delete>标签
该标签用于删除一个文件或一组文件,去属性例如以下。
(1)/file表示要删除的文件。
(2).dir表示要删除的文件夹。
(3).includeEmptyDirs 表示指定是否要删除空文件夹。默认值是删除。

(4).failonerror 表示指定当碰到错误是否停止,默认值是自己主动停止。
(5).verbose表示指定是否列出所删除的文件,默认值为不列出。
8.<copy>标签
该标签用于文件或文件集的拷贝,其属性例如以下。
(1).file 表示源文件

(2).tofile 表示目标文件。

(3).todir 表示目标文件夹。
(4).overwrite 表示指定是否覆盖目标文件,默认值是不覆盖。

(5).includeEmptyDirs 表示制定是否拷贝空文件夹。默认值为拷贝。
(6).failonerror 表示指定如目标没有发现是否自己主动停止,默认值是停止。

(7).verbose 表示制定是否显示具体信息,默认值不显示。
9.<exec>运行文件
<execexecutable="${base.dir}/email.bat" >
</exec>

5数据类型编辑

在构建文件里为了标识文件或文件组,常常须要使用数据类型。数据类型包括在 org.apache.tool.ant.types包中。以下就简介构建文件里一些经常使用的数据类型。

1. argument 类型
由Ant构建文件调用的程序,能够通过<arg>元素向其传递命令行參数。如apply,exec和java任 务均可接受嵌套<arg>元素。能够为各自的过程调用指定參数。下面是<arg>的全部属性。
(1).values 是一个命令參数。假设參数种有空格,但又想将它作为单独一个值,则使用此属性 。
(2).file表示一个參数的文件名称。在构建文件里,此文件名称相对于当前的工作文件夹。
(3).line表示用空格分隔的多个參数列表
(4).path表示路径。

2.ervironment 类型
由Ant构建文件调用的外部命令或程序。<env>元素制定了哪些环境变量要传递给正在运行的系 统命令,<env>元素能够接受下面属性。
(1).file表示环境变量值得文件名称。此文件名称要被转换位一个绝对路径

(2).path表示环境变量的路径。Ant会将它转换为一个本地约定。
(3).value 表示环境变量的一个直接变量。

(4).key 表示环境变量名。
注意 file path 或value仅仅能取一个。

3.filelist类型
Filelist 是一个支持命名的文件列表的数据类型。包括在一个filelist类型中的文件不一定是
存在的文件。下面是其全部的属性。
(1).dir是用于计算绝对文件名称的文件夹。

(2).files 是用逗号分隔的文件名称列表。
(3).refid 是对某处定义的一个<filelist>的引用。
注意 dir 和files 都是必要的,除非指定了refid(这样的情况下,dir和files都不同意使用)。
4.fileset类型
Fileset数据类型定义了一组文件,并通常表示为<fileset>元素。只是,很多ant任务构建成了 隐式的fileset,这说明他们支持全部的fileset属性和嵌套元素。下面为fileset 的属性列表。
(1).dir表示fileset 的基文件夹。
(2).casesensitive的值假设为false,那么匹配文件名称时。fileset不是区分大写和小写的。其默认 值为true.
(3).defaultexcludes 用来确定是否使用默认的排除模式。默觉得true。
(4).excludes 是用逗号分隔的须要派出的文件模式列表。
(5).excludesfile 表示每行包括一个排除模式的文件的文件名称。
(6).includes 是用逗号分隔的。须要包括的文件模式列表。
(7).includesfile 表示每行包括一个包括模式的文件名称。
5.patternset 类型
Fileset 是对文件的分组,而patternset是对模式的分组,他们是紧密相关的概念。

<patternset>支持4个属性:includesexcludex includexfile 和excludesfile,与fileset相 同。

Patternset 还同意下面嵌套元素:include,exclude,includefile 和excludesfile.

6.filterset 类型
Filterset定义了一组过滤器,这些过滤器将在文件移动或复制时完毕文件的文本替换
主要属性例如以下:
(1).begintoken 表示嵌套过滤器所搜索的记号,这是标识其開始的字符串。
(2).endtoken表示嵌套过滤器所搜索的记号这是标识其结束的字符串。

(3).id是过滤器的唯一标志符。
(4).refid是对构建文件里某处定义一个过滤器的引用。
7.Path类型
Path元素用来表示一个类路径,只是它还能够用于表示其它的路径。在用作揖个属性时。路经中 的各项用分号或冒号隔开。在构建的时候,此分隔符将取代当前平台中全部的路径分隔符,其拥 有的属性例如以下。
(1).location 表示一个文件或文件夹。Ant在内部将此扩展为一个绝对路径。

(2).refid 是对当前构建文件里某处定义的一个path的引用。
(3).path表示一个文件或路径名列表。

8.mapper类型
Mapper类型定义了一组输入文件和一组输出文件间的关系,其属性例如以下。

(1).classname 表示实现mapper类的类名。当内置mapper不满足要求时,用于创建定制mapper.
(2).classpath表示查找一个定制mapper时所用的类型路径。
(3).classpathref是对某处定义的一个类路径的引用。
(4).from属性的含义取决于所用的mapper.
(5).to属性的含义取决于所用的mapper.
(6).type属性的取值为identity,flattenglob merge regexp 当中之中的一个,它定义了要是用的

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn