Ant快速入门(四)-----Ant的任务(Task)

  到目前为止,我们已经掌握了Ant生成文件的基本结构,以及<project.../>,<target.../>,<property.../>等元素的配置方式。而<target.../>元素的核心就是task,即每个<target.../>由一个或多个task组成。

  Ant提供了大量核心的task和可选的task ,除此之外,Ant还允许用户定义自己的task,这大大扩展了Ant的功能。

  下面介绍几个常用的核心 task

  》javac:    用于编译一个或多个Java源文件,通常需要srcdir和destdir两个属性,用于指定Java源文件的位置和编译后class文件的保存位置。

  》java:   用于运行某个Java类,通常需要classname属性,用于指定需要运行那个类。

  》jar:   用于生成JAR包,通常需要指定destfile属性,用于指定所创建JAR包的文件名。除此之外,通常还应指定一个文件集,表明需要将那些文件打包到JAR包里。

  》sql:    用于执行一条或多条SQL语句,通常需要driver,url,userid和password等属性,用于指定连接数据库的驱动类,数据库URL,用户名和密码等,还可以通过src来指定需要指定的SQL脚本文件,或者直接用文本内容的方式指定SQL脚本字符串。

  》echo:  输出某个字符串。

  》exec:  执行操作系统的特定命令,通常需要executable属性,用于指定想执行的命令。

  》copy:  用于复制文件或路径。

  》delete: 用于删除文件或路径。

  》mkdir:  用于创建文件夹。

  》move:  用于移动文件和路径。

  查看Ant的文档,理解详细介绍了所有Ant的核心任务以及可选任务。

  下面定义了一份简单的生成文件,这份生成文件包含了编译Java文件,运行Java程序,生成JAR包等常用的target,通过这份文件就可以非常方便的管理该项目。

复制代码
 1 <?xml version='1.0' encoding='utf-8'?>
 2 <!--定义生成文件的project根元素,默认的target为空-->
 3 <project name="Demo" default="" basedir=".">
 4     <!--定义三个简单的属性-->
 5     <property name="src" value="src"/>
 6     <property name="classes" value="classes"/>
 7     <property name="dest" value="dest"/>
 8     <!--定义一组文件盒目录集-->
 9     <path id="classpath">
10         <pathelement path="${classes}"/>
11     </path>
12     <!--定义help target,用于输出该生成文件的帮助信息-->
13     <target name="help" description="打印帮助信息">
14         <echo>hep -打印帮助信息</echo>
15         <echo>compile -编译Java源文件</echo>
16         <echo>run -运行程序</echo>
17         <echo>build -打包JAR包</echo>
18         <echo>clean -清除所有编译生成的文件</echo>
19     </target>
20     <!--定义compile target,用于编译Java源文件-->
21     <target name="compile" description="编译Java源文件">
22         <!--先删除classes属性所代表的的文件夹-->
23         <delete dir="${classes}"/>
24         <!--创建classes所代表的文件夹-->
25         <mkdir dir="${classes}"/>
26         <!--编译Java源文件,编译后的classes文件放到classes属性所代表的文件夹-->
27         <javac destdir="${classes}" debug="true" 
28             includeantruntime="true" deprecation="false" 
29             optimize="false" failonerror="true">
30             <!--指定需要编译的Java文件所在的位置-->
31             <src path="${src}"/>
32             <!--指定编译Java文件所需要第三方类库所在的位置-->
33             <classpath refid="classpath"/>
34         </javac>
35     </target>
36     <!--定义run target,用于运行Java源文件-->
37     <target name="run" description="运行程序" depends="compile">
38         <!--运行demo.Demo类,其中fork指定启动另一个JVM来执行java命令-->
39         <java classname="demo.Demo" fork="yes" failonerror="true">
40             <classpath refid="classpath"/>
41             <!--运行Java程序同时传入两个参数-->
42             <arg line="测试参数1 测试参数2"/>
43         </java>
44     </target>
45     <!--定义build target,用于打包JAR文件 运行该target之前会先运行compile target-->
46     <target name="build" description="打包JAR文件" depends="compile">
47         <!--先删除dest属性所代表的文件夹-->
48         <delete dir="${dest}"/>
49         <!--创建dest属性所代表的文件夹-->
50         <mkdir dir="${dest}"/>
51         <!--指定将classes属性所代表的文件夹的所有.classes文件都打包到app.jar文件中-->
52         <jar destfile="${dest}/app.jar" basedir="${classes}"
53             includes="**/*.classes">
54             <!--为JAR包的清单文件添加属性-->
55             <manifest>
56                 <attribute name="Main-class" value="demo.Demo"/>
57             </manifest>
58         </jar>
59     </target>
60     <!--定义clean target 用于删除所有编译生成的文件-->
61     <target name="clean" description="清除所有编译生成的文件">
62         <!--删除两个目录,目录下的文件也一并删除-->
63         <delete dir="${classes}"/>
64         <delete dir="${dest}"/>
65     </target>
66 </project>
复制代码

   上面的生成文件中定义java task时 用到了 fork="true"(或fork="yes"效果也一样),这表明启动另一个JVM进程来运行demo.Demo类,这个属性通常是个陷阱!如果不指定该属性,该属性的默认值时false,这表明使用运行Ant的同一个JVM来运行Java程序,这将导致随着Ant工具执行完成,被运行的Java程序也不得不退出——这是我们所不希望看到的结果。

  上面的配置定义的生成文件里包含了5个target,这些target分别完成打印帮助信息,编译Java文件,运行Java程序,打包JAR包和清除编译中生成的文件。执行这些target可使用如下命令:

  》ant hep:  输出生成文件的帮助信息。

  》ant compile:  编译Java文件。

  》ant run:  运行demo.Demo类。

  》ant build:  将classes路径下所有class文件打包成app.jar,并放在dest目录下。

  》ant clean:  删除classes和dest两个目录。

posted on   Arts&Crafts  阅读(859)  评论(1编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示