Ant Task:Ant任务(执行多个构件文件)
2010-05-29 19:51
381 查看
如果需要在一个构件文件中通过Ant命令去执行另一个Ant项目,或者说要执行本项目的子项目的构件文件。这时Ant这个核心任务就派上用场了。简单地说Ant任务的作用就相当于在命令行通过Ant命令执行构件文件。值得注意的是Ant任务依赖于target元素,需要在某个target元素中使用,不能在target元素外独立使用。
Ant任务还可以实现类似Java程序间的继承关系,不过对于这个核心任务来说只继承property元素和reference属性。举个例子说,项目A中包含通过Ant任务去执行的项目B,而项目B中需要用到项目A中的属性C,那么可以通过设置的Ant任务中的inheritAll属性,使得在B项目中可以使用项目A中的属性C。从另一方面看,这也符合XP(极限)编程中的细分功能的思想,可以把大的项目切分为几分小项目,然后通过Ant工具进行整合。
(1)antfile属性:在Ant任务中antfile属性的作用是指定要执行的构件文件的名称,可包含路径信息。例如,在projectA中执行projectB的构件文件。projectA的构件文件内容如下:
<?xml version="1.0"?>
<!-- 在projectA中执行projectB的构件文件 -->
<project name="porjectA" default="callProjectB">
<target name="callProjectB">
<echo message="In projectA calling projectB"/>
<ant antfile="subfile/projectB.xml" />
</target>
</project>
projectB存放于subfile目录下,具体内容如下:
hamg<?xml version="1.0"?>
<project name="porjectB" default="init">
<target name="init">
<echo message="In projectB"/>
</target>
</project>
如果要通过projectA运行projectB的构件文件,那么可以在命令行执行:ant –buildfile projectA.xml,执行结果如图4.1所示。
图4.1 通过projectA运行projectB
从执行结果得知,antfile属性的作用相当于在Ant命令中指定-buildfile subfile/projectB. xml选项,只不过Ant任务提供了更方便的功能。如果antfile属性没设定,那么Ant任务会查找名称为build.xml的构件文件。当然antfile属性也可与dir属性结合使用,antfile指定文件名称,dir属性指定文件所在的目录。
(2)dir属性:在Ant任务中dir属性的作用是用于指定构件文件所在的目录。相当于指定了要执行的构件文件的basedir属性。在默认情况下如果dir属性没设定,那么会以当前执行的构件文件的根目录作为Ant任务的根目录。这个属性设定后,被执行的构件文件的basedir属性将取dir属性的值。下面把targetA.xml构件文件改写为通过dir属性指定目录以实现同样的功能,具体的构件文件内容如下:
<?xml version="1.0"?>
<project name="porjectA" default="callProjectB">
<!-- //调用projectB.xml构件文件 -->
<target name="callProjectB">
<echo message="In projectA calling projectB"/>
<ant antfile="projectB.xml" dir=” subfile” />
</target>
</project>
(3)target属性:在Ant任务中target属性的作用是指定被执行的构件文件中所要执行的target,如果target属性没有设定,那么将会执行被调用的构件文件中的默认target(也就是project元素中指定default值)。这个属性相当于在命令行执行时指定要执行的target的选项。例如,在projectA1中调用projectB1,并执行projectB1中的target“target2”。编写projectA1.xml构件文件,内容如下:
<?xml version="1.0"?>
<project name="porjectA" default="callProjectB">
<target name="callProjectB">
<echo message="In projectA calling projectB"/>
<!-- //通过ant 任务执行projectB.xml构件文件,指定执行target2这个target -->
<ant antfile="subfile/projectB.xml" target=" target2"/>
</target>
</project>
被调用的projectB.xml构件文件的内容如下:
<?xml version="1.0"?>
<project name="porjectB" default="init">
<target name="init">
<echo message="In projectB"/>
</target>
<target name=”target2” >
<echo message=”In projectB,execute target2” />
</target>
</project>
然后在命令行执行ant –f projectA1.xml以查看Ant任务的执行效果,执行结果如图4.2所示。
图4.2 项目调用结果
在执行结果中可看出,在targetA.xml中通过Ant任务执行了targetB.xml中的target2这个target。
(4)output属性:在Ant任务中output属性主要用于指定Ant工具执行时的信息输出,可定位到控制台或定位到文件中。当输出信息到文件中时,相当于在命令行指定-logfile<file>,-l<file>选项。如果指定了dir属性,那么被指定的输出文件的位置是相对于dir属性指定的目录的,当然也可以通过绝对路径指定。例如,把projectA中的输出信息定位到out.log文件,构件文件的内容如下:
<?xml version="1.0"?>
<project name="porjectA" default="callProjectB">
<target name="callProjectB">
<echo message="In projectA calling projectB"/>
<!-- //输出信息到out.log中 -- >
<ant antfile="subfile/projectB.xml" output="out.log"/>
</target>
</project>
(5)inheritAll属性:在Ant任务中inheritAll属性用于指定被调用的构件文件的project元素中可使用当前project元素中的属性。这个属性类似于Java程序中类的继承关系。默认时inheritAll属性取值为true。
(6)inheritRefs属性:在Ant任务中,如果设定了inheritRefs属性为true,那么被调用的构件文件中的project元素可引用当前project元素中的reference(参考)任务。
Reference任务的作用是把当前的属性复制到被调用的Ant project中使用。References任务包含两个属性,如下:
● refid属性:这个属性代表当前project中的属性id。
● torefid属性:用于指定在被调用的project中的引用id。
Reference的使用例子如下:
<reference refid="path1" torefid="path2"/>
<!-- // 把当前project中的path1属性传递给被调用的project中使用,
在被调用project中通过path2引用这个属性。 -- >
Ant任务还可以实现类似Java程序间的继承关系,不过对于这个核心任务来说只继承property元素和reference属性。举个例子说,项目A中包含通过Ant任务去执行的项目B,而项目B中需要用到项目A中的属性C,那么可以通过设置的Ant任务中的inheritAll属性,使得在B项目中可以使用项目A中的属性C。从另一方面看,这也符合XP(极限)编程中的细分功能的思想,可以把大的项目切分为几分小项目,然后通过Ant工具进行整合。
4.1.1 Ant Task的属性及功能
Ant任务包括antfile、dir、target、output、inheritAll、inheritRefs这些属性,具体说明如下:(1)antfile属性:在Ant任务中antfile属性的作用是指定要执行的构件文件的名称,可包含路径信息。例如,在projectA中执行projectB的构件文件。projectA的构件文件内容如下:
<?xml version="1.0"?>
<!-- 在projectA中执行projectB的构件文件 -->
<project name="porjectA" default="callProjectB">
<target name="callProjectB">
<echo message="In projectA calling projectB"/>
<ant antfile="subfile/projectB.xml" />
</target>
</project>
projectB存放于subfile目录下,具体内容如下:
hamg<?xml version="1.0"?>
<project name="porjectB" default="init">
<target name="init">
<echo message="In projectB"/>
</target>
</project>
如果要通过projectA运行projectB的构件文件,那么可以在命令行执行:ant –buildfile projectA.xml,执行结果如图4.1所示。
图4.1 通过projectA运行projectB
从执行结果得知,antfile属性的作用相当于在Ant命令中指定-buildfile subfile/projectB. xml选项,只不过Ant任务提供了更方便的功能。如果antfile属性没设定,那么Ant任务会查找名称为build.xml的构件文件。当然antfile属性也可与dir属性结合使用,antfile指定文件名称,dir属性指定文件所在的目录。
(2)dir属性:在Ant任务中dir属性的作用是用于指定构件文件所在的目录。相当于指定了要执行的构件文件的basedir属性。在默认情况下如果dir属性没设定,那么会以当前执行的构件文件的根目录作为Ant任务的根目录。这个属性设定后,被执行的构件文件的basedir属性将取dir属性的值。下面把targetA.xml构件文件改写为通过dir属性指定目录以实现同样的功能,具体的构件文件内容如下:
<?xml version="1.0"?>
<project name="porjectA" default="callProjectB">
<!-- //调用projectB.xml构件文件 -->
<target name="callProjectB">
<echo message="In projectA calling projectB"/>
<ant antfile="projectB.xml" dir=” subfile” />
</target>
</project>
(3)target属性:在Ant任务中target属性的作用是指定被执行的构件文件中所要执行的target,如果target属性没有设定,那么将会执行被调用的构件文件中的默认target(也就是project元素中指定default值)。这个属性相当于在命令行执行时指定要执行的target的选项。例如,在projectA1中调用projectB1,并执行projectB1中的target“target2”。编写projectA1.xml构件文件,内容如下:
<?xml version="1.0"?>
<project name="porjectA" default="callProjectB">
<target name="callProjectB">
<echo message="In projectA calling projectB"/>
<!-- //通过ant 任务执行projectB.xml构件文件,指定执行target2这个target -->
<ant antfile="subfile/projectB.xml" target=" target2"/>
</target>
</project>
被调用的projectB.xml构件文件的内容如下:
<?xml version="1.0"?>
<project name="porjectB" default="init">
<target name="init">
<echo message="In projectB"/>
</target>
<target name=”target2” >
<echo message=”In projectB,execute target2” />
</target>
</project>
然后在命令行执行ant –f projectA1.xml以查看Ant任务的执行效果,执行结果如图4.2所示。
图4.2 项目调用结果
在执行结果中可看出,在targetA.xml中通过Ant任务执行了targetB.xml中的target2这个target。
(4)output属性:在Ant任务中output属性主要用于指定Ant工具执行时的信息输出,可定位到控制台或定位到文件中。当输出信息到文件中时,相当于在命令行指定-logfile<file>,-l<file>选项。如果指定了dir属性,那么被指定的输出文件的位置是相对于dir属性指定的目录的,当然也可以通过绝对路径指定。例如,把projectA中的输出信息定位到out.log文件,构件文件的内容如下:
<?xml version="1.0"?>
<project name="porjectA" default="callProjectB">
<target name="callProjectB">
<echo message="In projectA calling projectB"/>
<!-- //输出信息到out.log中 -- >
<ant antfile="subfile/projectB.xml" output="out.log"/>
</target>
</project>
(5)inheritAll属性:在Ant任务中inheritAll属性用于指定被调用的构件文件的project元素中可使用当前project元素中的属性。这个属性类似于Java程序中类的继承关系。默认时inheritAll属性取值为true。
(6)inheritRefs属性:在Ant任务中,如果设定了inheritRefs属性为true,那么被调用的构件文件中的project元素可引用当前project元素中的reference(参考)任务。
Reference任务的作用是把当前的属性复制到被调用的Ant project中使用。References任务包含两个属性,如下:
● refid属性:这个属性代表当前project中的属性id。
● torefid属性:用于指定在被调用的project中的引用id。
Reference的使用例子如下:
<reference refid="path1" torefid="path2"/>
<!-- // 把当前project中的path1属性传递给被调用的project中使用,
在被调用project中通过path2引用这个属性。 -- >
相关文章推荐
- Ant任务(执行多个构件文件)
- spring中集成TimerTask执行定时任务 中配置文件的配置
- 执行ant构建文件过后,没有修改任何相关的文件,第二遍执行ant,这时ant会提示任务已经完成的任务不再执行,记住这是任务级别的,这种情况包括在控制台上指定两个project
- Ant 执行 YUICompressor 任务压缩 JavaScript 和 CSS 文件,解决中文乱码问题,增加源文件字符编码集设定
- Ant 执行 YUICompressor 任务压缩 JavaScript 和 CSS 文件,解决中文乱码问题,增加源文件字符编码集设定
- Ant 执行 YUICompressor 任务压缩 JavaScript 和 CSS 文件,解决中文乱码问题,增加源文件字符编码集设定
- Timer类 和 TimerTask类。一种有用计时器工具。可以每隔相同时间去执行某任务一次。
- 利用 Ant 的 SQL Task 来实现自己的 Java 执行 SQL 脚本文件的功能
- Windows Server 2012计划任务定时执行bat文件
- 利用 spring 的 task:scheduled-tasks 执行定期任务
- Hadoop MapReduce之ReduceTask任务执行(一)
- 解决crontab计划任务命令写对查看日志也有执行记录但命令执行后却没相应创建文件
- thinkphp 定时执行php文件--windows系统任务计划
- 3招解决ant构建时任务找不到(taskdef cann't be found)的问题
- 设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)
- Hadoop MapReduce之ReduceTask任务执行(一):远程拷贝map输出
- SSIS 中的文件系统任务 (File System Task)
- 在WINDOWS中设置计划任务执行PHP文件
- java中计时器的用法Timer和TimerTask的用法__java中利用Timer与TImerTask 计时器间隔执行任务
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现