`

Ant 扩展(一)

阅读更多

一、为啥要用Ant-Contrib ?

     因为要做一个循环,用户配置两个或多个工程名后,这两个或多个工程有相同的工程结构,但是是属于不同的项目,如果把这个两个项目的工程整合成一个,写一个build,自动的把这几个工程进行合并。

    看了一下ant,没有java中类似于下面代码的功能,所以找到Ant-Contrib,听说这个东东能帮我解决问题。

String array[]={"aa","bb","cc"};
	    for (int i = 0; i < array.length; i++) {
		     method(array[0]);//当然对于build来说,这里应该是target
	     }

二、开始使用

找到http://ant-contrib.sourceforge.net/,上面说得很清楚了,使用Ant-Contrib之前应该先安装ant,而且Ant-Contrib 中的大部分task需要ant1.5或者更高版本。先看一下我的ant版本,我用得是Eclipse中集成的1.6.5ant,"Window→Preferences→Ant→Runtime",如下图,在classpath中可以看到我的ant 版本是1.6.5。

 

先在网上下载一个ant-contrib-1.0b3.jar,我已经上传到附件中,

然后在ant的build.xml中添加下面的代码:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE project [
<!ENTITY build-properties  SYSTEM "build-properties.xml">
]>
<project name="DCI.XXX" basedir="." default="build-many-project">
	<!-- ============================================================== -->
	<!--                       Compile Settings                         -->
	<!-- ============================================================== -->
	<property name="build.debug" value="on" />
	<property name="build.debuglevel" value="lines,vars,source" />
	<property name="build.optimize" value="off" />
	<property name="build.deprecation" value="off" />
	<property name="build.source" value="1.4" />

	<property name="workspace.dir" location="../../../" />
	<property name="target.project.dir" location="../../" />


	<path id="ant.contrib.lib">
		<fileset dir="lib">
			<include name="**/*jar" />
		</fileset>
	</path>
	<taskdef resource="net/sf/antcontrib/antcontrib.properties">
		<classpath>
			<path refid="ant.contrib.lib" />
		</classpath>
	</taskdef>
	<taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach">
		<classpath>
			<path refid="ant.contrib.lib" />
		</classpath>
	</taskdef>
	
	<!-- ============================================================== -->
	<!--                       循环构建每一个工程                              -->
	<!-- ============================================================== -->
	<target name="build-many-project">
		<foreach target="build-one-project" param="projectName" list="cip;hnppb_bap" delimiter=";" />
	</target>
	<!-- ============================================================== -->
	<!--                       构建每一个工程                                  -->
	<!-- ============================================================== -->
	<target name="build-one-project">		
		<!--把java文件拷贝到src/java目录-->
		<copy todir="${target.project.dir}/src/java" overwrite="true">
			<fileset dir="${workspace.dir}/${projectName}/src/java">
				<include name="**/*" />
			</fileset>
		</copy>			
	</target>
</project>

 

上面的代码可以看出,我只使用了foreach这个功能,还有if等别的功能,大家可以使用。

 

三、确实方便了很多,根据客户配置的工程名,处理每个工程,但是后来又遇到一个问题,就是copy时,因为是把两个或者多个工程合并到一个工程,我希望重名的文件能够给出提示,让用户手工处理,ant 的copy  task太简单了,只能配置是否覆盖,所以我确定扩展ant,即自己定义task ,ant的架构设计得真是优秀,扩展起来太方便了,只需要建一个继承了Task类的类,打包成jar后,在xml配置文件中使用 taskdef  导入即可,具体来说就是以下几步:

1、建一个工程:

        

在Eclipse下的ant jar包拷到lib 下,设置build path, 这样就不会报编译错误。

2、构建BuildManyProject类

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
public class BuildManyProject extends Task {
	public void execute() throws BuildException { 
		System.out.println("俺会输出来的");	
	}  
}

3、打包为jar,将class文件拷到f盘,然后使用

cmd

 f: (进入f盘)

jar -cvf buildmatic.jar com\   (打包为buildmatic.jar)

将buildmatic.jar拷贝到build.xml文件所以工程的lib目录下

 

4、使用:在 build.xml中加入下面的代码

 

<path id="ant.buildmatic.lib">
		<fileset dir="lib">
			<include name="**/buildmatic.jar" />
		</fileset>
</path>
<taskdef name="buildManyProject" classname="com.smartdor.bap.buildmatic.BuildManyProject">
			<classpath>
				<path refid="ant.buildmatic.lib" />
			</classpath>
	</taskdef>
<buildManyProject/>

OK,,运行的时候会出现:"俺会输出来的"

 

总结:ant 里定义了一结构建工程常用的命令,例如copy、javac等,ant-contrib对ant的任务进行了扩展,提供了条件、循环判断,但是如果有时候这些扩展还是不满足我们的日常需求,那只能自己扩展了,有必要研究一下ant 架构的设计,看看怎么做到这么灵活的可插拔的,end.

  • 大小: 146.7 KB
  • 大小: 18 KB
分享到:
评论
1 楼 泣血端午 2011-12-15  
很好啊

相关推荐

    替换文本文件中Ant表达式的Ant扩展任务

    该程序为Ant的扩展任务,在拷贝文本格式的文件的同时替换文件中的Ant表达式,类似于 ${property.name},属性值来自于Ant脚本加载的属性文件,如果没有属性文件中没有定义相关属性,那么保留原来的表达式;...

    ant培训 经典教程

    ant培训 亲临讲座 绝对经典 培训资料整理 谢谢下载

    ant 学习与总结

    Ant与从基于命令的那些扩展开来的那些工具不同,Ant是由java类扩展的。不用编写shell命令,而是配置基于XML的文件,形成多个任务的目标配置树。每一个任务都是通过一个实现了一个规定接口的java类来运行的。 ant...

    ant工具的使用

    Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。目前的最新版本为:Ant 1.8.1。  既然我们已经有了make, gnumake, nmake, jam以及其他的build工具为什么还要要一...

    Ant 项目生成工具

    在本教程中,您将学习 Ant 这个Java TM 项目生成工具。由于其灵活性和易用性,Ant 很快在 Java 开发人员中流行开来,因此您有必要了解关于它的更多信息。...一个扩展 Ant 功能的自己的Java 类来结束本教程。

    Apache Ant入门教程

    Apache Ant 是一个基于 Java 的生成工具。据最初的创始人 James ...Ant 的其他关键优势包括其突出的简单性和无缝地使用自定义功能来扩展它的能力。但愿您在完成本教程其余内容的学习之后,会欣赏 Ant 的这些优势。

    ant使用指南.pdf

    在本教程中,您将学习 Ant 这个 Java TM 项目生成工具。由于其灵活性和易用性,Ant 很快在 Java 开发人员中流行开来,因此您有必要了解关于它的更多信息。...一个扩展 Ant 功能的自己的 Java 类来结束本教程。

    ANT IN ACTION 第2版 中文版

    它是广受赞誉的最佳畅销书《Java Development with Ant》的第2版,Ant是Java项目中使用最广泛的构建工具,它跨平台、可扩展,而且运行高效。无论是小到个人项目还是大到多团队协作的企业级项目,Ant都能应对自如。...

    Ant权威指南

    Ant本身也是用Java编写的,它可在多个平台(如Unix、Linux以及Windows等等)上工作,因此如果你要转换开发平台,那么学习Ant是值得的,Ant很容易扩展。在你的工程中,目前是否存在某个需求,而所有Ant功能对此都不能...

    ant contrib if jar包

    ant contrib if jar包 下完后 请评论 就不会被扣分了 谢谢

    Ant使用指南-Ant入门手册

    Ant是什么、Ant入门、Ant入门书籍、Ant入门手册、Ant资料、Ant文档、Ant使用指南 包括以下章节: Ant入门 Ant基础 运行Ant 生成一个简单的JAVA项目 文件系统操作 ...使用自定义任务来扩展Ant 结束语和参考资料

    打包工具 Ant 学习指南

    Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。 Ant就不同了。与基于shell命令的扩展模式不同,Ant用Java的类来扩展。

    Ant使用指南pdf

    全面的ant使用手册~!内容如下: · Ant 生成文件是如何构造的 · 如何从命令行以及从Eclipse 内运行Ant · 如果通过编译源代码、创建 JAR 文件以及时间戳文件(以识别...· 如何通过编写 Java 类来扩展Ant 的标准功能

    Ant-Worker-Tasks:用于创建文档的Apache Ant扩展-开源

    [english]该项目是为了使Apache ant扩展可用于创建目标较大的文档(例如,教学脚本)。 这里是图像,表格和工程图等经过转换后可以使用LaTeX处理的图像,表格和工程图等。 可用于该工作的其他功能,邻居将相应地创建...

    12_ant_基于j2se的综合实战项目_扩展一些知识

    12_ant_基于j2se的综合实战项目_扩展一些知识12_ant_基于j2se的综合实战项目_扩展一些知识

    Ant 的 (批处理)Bat 实现

    ANT 是一个Java TM 项目生成工具 本批处理程序模仿其功能 可以生成Java 工程 可编译Java程序 可运行Tomcat 本程序小巧,移植性好,易扩展 大家可以一起修改,改善其功能

    apache-ant-1.8.4-src.tar.bz2

    Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。目前的最新版本为:Ant 1.8.4。 既然我们已经有了make, gnumake, nmake, jam以及其他的build工具为什么还要要一种...

    Ant 1.9.2 API (CHM格式)

    Ant是Java程序员的一个好的工具,主要可以帮助程序员进行java项目的的管理,包括批量编译、部署、文档生成等工作,其用途远不止如此,ant内置了大量的API进行各种文件系统操作,在各种应用服务器中都被广泛应用于...

    apache-ant-1.9.6-src

    Apache Ant是Java库和命令行工具,其使命是驱动过程描述在构建文件目标和扩展点的互相依赖。Ant的主要用途是构建应用程序。Ant提供了一些内置的任务,允许编译、汇编、测试和运行应用程序。也可以有效地用于构建非...

    ant-contrib-1.0b3

    ant的扩展包,实现foreach等操作

Global site tag (gtag.js) - Google Analytics