ant中文教程(4)

来源:互联网 发布:c 编程实例视频教程 编辑:程序博客网 时间:2024/05/18 03:20

</fileset>

<pathelement location="classes"/>

</classpath>

上面的例子构造了一个路径值包括:${classpath}的路径,跟着lib目录下的所有jar文件,接着是classes目录。

如果你想在多个task中使用相同的path-like structure,你可以用<path>元素定义他们(与target同级),然后通过id属性引用--参考Referencs例子。

path-like structure可能包括对另一个path-like structurede的引用(通过嵌套<path>元素):

<path id="base.path">

<pathelement path="${classpath}"/>

<fileset dir="lib">

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

</fileset>

<pathelement location="classes"/>

</path>

<path id="tests.path">

<path refid="base.path"/>

<pathelement location="testclasses"/>

</path>

前面所提的关于<classpath>的简洁写法对于<path>也是有效的,如:

<path id="tests.path">

<path refid="base.path"/>

<pathelement location="testclasses"/>

</path>

可写成:

<path id="base.path" path="${classpath}"/>

命令行变量

有些task可接受参数,并将其传递给另一个进程。为了能在变量中包含空格字符,可使用嵌套的arg元素。

Attribute Description Required

value 一个命令行变量;可包含空格字符。 只能用一个

line 空格分隔的命令行变量列表。

file 作为命令行变量的文件名;会被文件的绝对名替代。

path 一个作为单个命令行变量的path-like的字符串;或作为分隔符,Ant会将其转变为特定平台的分隔符。

例子

<arg value="-l -a"/>

是一个含有空格的单个的命令行变量。

<arg line="-l -a"/>

是两个空格分隔的命令行变量。

<arg path="/dir;/dir2:/dir3"/>

是一个命令行变量,其值在DOS系统上为/dir;/dir2;/dir3;在Unix系统上为/dir:/dir2:/dir3 。

References

buildfile元素的id属性可用来引用这些元素。如果你需要一遍遍的复制相同的XML代码块,这一属性就很有用--如多次使用<classpath>结构。

下面的例子:

<project ... >

<target ... >

<rmic ...>

<classpath>

<pathelement location="lib/"/>

<pathelement path="${java.class.path}/"/>

<pathelement path="${additional.path}"/>

</classpath>

</rmic>

</target>

<target ... >

<javac ...>

<classpath>

<pathelement location="lib/"/>

<pathelement path="${java.class.path}/"/>

<pathelement path="${additional.path}"/>

</classpath>

</javac>

</target>

</project>

可以写成如下形式:

<project ... >

<path id="project.class.path">

<pathelement location="lib/"/>

<pathelement path="${java.class.path}/"/>

<pathelement path="${additional.path}"/>

</path>

<target ... >

<rmic ...>

<classpath refid="project.class.path"/>

</rmic>

</target>

<target ... >

<javac ...>

<classpath refid="project.class.path"/>
 </javac>

</target>

</project>

所有使用PatternSets, FileSets 或 path-like structures嵌套元素的task也接受这种类型的引用。

4.1 File(Directory)类

4.1.1 Mkdir

? 创建一个目录,如果他的父目录不存在,也会被同时创建。

? 例子:

<mkdir dir="build/classes"/>

? 说明: 如果build不存在,也会被同时创建

4.1.2 Copy

? 拷贝一个(组)文件、目录

? 例子:

1. 拷贝单个的文件:

<copy file="myfile.txt" tofile="mycopy.txt"/>

2. 拷贝单个的文件到指定目录下

<copy file="myfile.txt" todir="../some/other/dir"/>

3. 拷贝一个目录到另外一个目录下

<copy todir="../new/dir">

<fileset dir="src_dir"/>

</copy>

4. 拷贝一批文件到指定目录下

<copy todir="../dest/dir">

<fileset dir="src_dir">

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

</fileset>

</copy>

<copy todir="../dest/dir">

<fileset dir="src_dir" excludes="**/*.java"/>

</copy>

5. 拷贝一批文件到指定目录下,将文件名后增加。Bak后缀

<copy todir="../backup/dir">

<fileset dir="src_dir"/>

<mapper type="glob" from="*" to="*.bak"/>

</copy>

6. 拷贝一组文件到指定目录下,替换其中的@标签@内容

<copy todir="../backup/dir">

<fileset dir="src_dir"/>

<filterset>

<filter token="TITLE" value="Foo Bar"/>

</filterset>

</copy>

4.1.3 Delete

? 删除一个(组)文件或者目录

? 例子

1. 删除一个文件

<delete file="/lib/ant.jar"/>

2. 删除指定目录及其子目录

<delete dir="lib"/>

3. 删除指定的一组文件

<delete>

<fileset dir="." includes="**/*.bak"/>

</delete>

4. 删除指定目录及其子目录,包括他自己

<delete includeEmptyDirs="true">

<fileset dir="build"/>

</delete>

4.1.4 Move

? 移动或重命名一个(组)文件、目录

? 例子:

1. 移动或重命名一个文件

<move file="file.orig" tofile="file.moved"/>

2. 移动或重命名一个文件到另一个文件夹下面

<move file="file.orig" todir="dir/to/move/to"/>

3. 将一个目录移到另外一个目录下

<move todir="new/dir/to/move/to">

<fileset dir="src/dir"/>

</move>

4. 将一组文件移动到另外的目录下

<move todir="some/new/dir">

<fileset dir="my/src/dir">

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

<exclude name="**/ant.jar"/>

</fileset>

</move>

5. 移动文件过程中增加。Bak后缀

<move todir="my/src/dir">

<fileset dir="my/src/dir">

<exclude name="**/*.bak"/>

</fileset>

<mapper type="glob" from="*" to="*.bak"/>

</move>

4.2 Java相关

4.2.1 Javac

? 编译java原代码

? 例子

1. <javac srcdir="${src}"

destdir="${build}"

classpath="xyz.jar"

debug="on"
/>

编译${src}目录及其子目录下的所有。Java文件,。Class文件将放在${build}指定的目录下,classpath表示需要用到的类文件或者目录,debug设置为on表示输出debug信息

2. <javac srcdir="${src}:${src2}"

destdir="${build}"

includes="mypackage/p1/**,mypackage/p2/**"

excludes="mypackage/p1/testpackage/**"

classpath="xyz.jar"

debug="on"

/>

编译${src}和${src2}目录及其子目录下的所有。Java文件,但是package/p1/**,mypackage/p2/**将被编译,而mypackage/p1/testpackage/**将不会被编译。Class文件将放在${build}指定的目录下,classpath表示需要用到的类文件或者目录,debug设置为on表示输出debug信息

3. <property name="classpath" value=".;./xml-apis.jar;../lib/xbean.jar;./easypo.jar"/>

<javac srcdir="${src}"

destdir="${src}"

classpath="${classpath}"

debug="on"

/>

路径是在property中定义的

4.2.2 java

? 执行指定的java类

? 例子:

1. <java classname="test.Main">

<classpath>

<pathelement location="dist/test.jar"/>

<pathelement path="${java.class.path}"/>

</classpath>

</java>

classname中指定要执行的类,classpath设定要使用的环境变量

2. <path id="project.class.path">

<pathelement location="lib/"/>

<pathelement path="${java.class.path}/"/>

<pathelement path="${additional.path}"/>

</path>

<target ... >

<rmic ...>

<classpath refid="project.class.path"/>

</rmic>

</target>

4.3 打包相关

4.3.1 jar

? 将一组文件打包

? 例子:

1. <jar destfile="${dist}/lib/app.jar" basedir="${build}/classes"/>

将${build}/classes下面的所有文件打包到${dist}/lib/app.jar中

2. <jar destfile="${dist}/lib/app.jar"

basedir="${build}/classes"

includes="mypackage/test/**"

excludes="**/Test.class"

/>

将${build}/classes下面的所有文件打包到${dist}/lib/app.jar中,但是包括mypackage/test/所有文件不包括所有的Test.class

3. <jar destfile="${dist}/lib/app.jar"

basedir="${build}/classes"

includes="mypackage/test/**"

excludes="**/Test.class"

manifest=”my.mf”

/>

manifest属性指定自己的META-INF/MANIFEST.MF文件,而不是由系统生成

4.3.2 war

? 对Jar的扩展,用于打包Web应用

? 例子:

? 假设我们的文件目录如下:

thirdparty/libs/jdbc1.jar

thirdparty/libs/jdbc2.jar

build/main/com/myco/myapp/Servlet.class

src/metadata/myapp.xml

src/html/myapp/index.html

src/jsp/myapp/front.jsp

src/graphics/images/gifs/small/logo.gif

src/graphics/images/gifs/large/logo.gif

? 下面是我们的任务的内容:

<war destfile="myapp.war" webxml="src/metadata/myapp.xml">

<fileset dir="src/html/myapp"/>

<fileset dir="src/jsp/myapp"/>

<lib dir="thirdparty/libs">

<exclude name="jdbc1.jar"/>

</lib>

<classes dir="build/main"/>

<zipfileset dir="src/graphics/images/gifs"
prefix="images"/>

</war>

? 完成后的结果:

WEB-INF/web.xml

WEB-INF/lib/jdbc2.jar

WEB-INF/classes/com/myco/myapp/Servlet.class

META-INF/MANIFEST.MF

index.html

front.jsp

images/small/logo.gif

images/large/logo.gif

4.3.3 ear

? 用于打包企业应用

? 例子

<ear destfile="${build.dir}/myapp.ear" appxml="${src.dir}/metadata/application.xml">

<fileset dir="${build.dir}" includes="*.jar,*.war"/>

</ear>

4.4 时间戳

在生成环境中使用当前时间和日期,以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这经常是可取的。这可能涉及编辑一个文件,以便插入一个字符串来指定日期和时间,或将这个信息合并到 JAR 或 zip 文件的文件名中。

这种需要是通过简单但是非常有用的 tstamp 任务来解决的。这个任务通常在某次生成过程开始时调用,比如在一个 init 目标中。这个任务不需要属性,许多情况下只需 <tstamp/> 就足够了。

tstamp 不产生任何输出;相反,它根据当前系统时间和日期设置 Ant 属性。下面是 tstamp 设置的一些属性、对每个属性的说明,以及这些属性可被设置到的值的例子:

属性 说明 例子

DSTAMP 设置为当前日期,默认格式为yyyymmdd 20031217

TSTAMP 设置为当前时间,默认格式为 hhmm 1603

TODAY 设置为当前日期,带完整的月份 2003 年 12 月 17 日

例如,在前一小节中,我们按如下方式创建了一个 JAR 文件:

<jar destfile="package.jar" basedir="classes"/>

在调用 tstamp 任务之后,我们能够根据日期命名该 JAR 文件,如下所示:

<jar destfile="package-${DSTAMP}.jar" basedir="classes"/>

因此,如果这个任务在 2003 年 12 月 17 日调用,该 JAR 文件将被命名为 package-20031217.jar。

还可以配置 tstamp 任务来设置不同的属性,应用一个当前时间之前或之后的时间偏移,或以不同的方式格式化该字符串。所有这些都是使用一个嵌套的 format 元素来完成的,如下所示:

<tstamp>

<format property="OFFSET_TIME"

pattern="HH:mm:ss"

offset="10" unit="minute"/>

</tstamp>

上面的清单将 OFFSET_TIME 属性设置为距离当前时间 10 分钟之后的小时数、分钟数和秒数。

用于定义格式字符串的字符与 java.text.SimpleDateFormat 类所定义的那些格式字符相同

4.5 执行SQL语句

? 通过jdbc执行SQL语句

? 例子:

1. <sql

driver="org.gjt.mm.mysql.Driver"

url="jdbc:mysql://localhost:3306/mydb"

userid="root"

password="root"

src="data.sql"

/>

2. <sql

driver="org.database.jdbcDriver"

url="jdbc:database-url"

userid="sa"

password="pass"

src="data.sql"

rdbms="oracle"

version="8.1."

>

</sql>

只有在oracle、版本是8.1的时候才执行

4.6 发送邮件

? 使用SMTP服务器发送邮件

? 例子:

<mail mailhost="smtp.myisp.com" mailport="1025" subject="Test build">

<from address="me@myisp.com"/>

<to address="all@xyz.com"/>

<message>The ${buildname} nightly build has completed</message>

<fileset dir="dist">

<includes name="**/*.zip"/>

</fileset>

</mail>

? mailhost: SMTP服务器地址

? mailport: 服务器端口

? subject: 主题

? from: 发送人地址

? to: 接受人地址

? message: 发送的消息

? fileset: 设置附件

原创粉丝点击