`

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项目构建工具,它通过XML配置文件实现自动化构建,适用于各种复杂项目,并具有高度的可配置性和可扩展性。在软件开发的生命周期中,Ant起到了确保代码质量、简化部署流程和促进团队...

    ant培训 经典教程

    Ant是Apache软件基金会下的一个项目,它是一款Java构建工具,主要负责自动化构建Java项目,如编译源代码、运行测试、打包和部署等任务。在Java开发领域,Ant以其灵活性和可配置性著称,是许多大型项目的核心构建工具...

    ant学习资料大全。Ant是一种基于Java的Build工具。

    Ant的设计理念是跨平台性和可扩展性,这两个特性使其在众多构建工具中脱颖而出。 Ant的跨平台性源于其基于Java的实现。这意味着无论操作系统环境如何,只要安装了Java运行环境,Ant就能工作。通过Java编写自定义...

    项目Ant配置实例一次下载各处使用

    总结来说,Ant是一个强大的构建工具,其灵活性和可扩展性使其成为Java项目中不可或缺的一部分。通过正确配置`build.xml`和相关的属性文件,我们可以创建一个高效且易于维护的构建系统,实现“一次配置,稍改即用”的...

    ant 第一个例子

    在IT行业中,Ant是Apache软件基金会的一个开源项目,它是一个基于Java的构建工具,主要用于管理Java项目的构建过程。Ant以其灵活性和可配置性而受到广大开发者喜爱,它使用XML来描述构建过程,使得构建脚本易于理解...

    ant工具ant资源包

    Ant提供了大量的内置任务,并且可以通过扩展自定义任务。 4. **属性(Properties)**:属性用于存储配置信息,如路径、版本号等,可以在整个构建文件中引用。它们可以通过命令行参数或在构建文件中设置。 5. **...

    自动化测试系列一 ANT

    并且由于是Java的一部分,ANT可以访问Java类库,提供强大的扩展性。 7. **示例分析**:文件“小学館日本大百科.7z.001”可能是一个压缩文件,可能包含了示例的ANT构建脚本或其他相关资源。不过,由于无法直接查看...

    ant lib ant 所有lib包

    "ant-contrib-1.0b2"是Ant的一个扩展库,名为Ant Contrib,它提供了一系列额外的任务和数据类型,扩展了Ant的原生功能。例如,它包含了用于流程控制的任务(如for、if、foreach)、数据库操作任务、Windows批处理...

    apache-ant-1.6.0-bin.zip_ant 1_ant 1.6_ant 1.6.0_ant-1.6.0_apach

    用户可以通过扩展Ant的任务或者编写自定义任务来满足特定需求。 在"apache-ant-1.6.0-bin.zip"这个压缩包中,通常会包含以下组件: 1. `bin`目录:包含了Ant的可执行脚本,如`ant`和`ant.bat`,分别用于Unix/Linux...

    ant.jar,ant-junit.jar,ant-launcher.jar,ant-trax.jar

    2. ant-junit.jar:此文件扩展了Ant的功能,使其能够集成和运行JUnit测试。JUnit是Java编程语言中的一款流行的单元测试框架。通过ant-junit.jar,开发者可以在Ant构建脚本中轻松地执行单元测试,收集测试结果,甚至...

    ant工具和ant教程

    标签"java"表明Ant主要与Java开发相关,但Ant也适用于其他语言的项目,因为它的任务系统可以扩展。通过使用Ant贡献的库或自定义任务,你可以处理C++、Python等语言的构建需求。 Ant的一个重要特性是依赖性管理。它...

    ant contrib if jar包

    Ant Contrib If Jar包是Apache Ant构建工具的一个扩展库,它为Ant任务提供了条件语句的支持,使得构建脚本能够根据特定条件执行或跳过某些任务。Ant是一个Java库和命令行工具,其任务是驱动构建过程,常用于自动化...

    ant介绍Ant是什么

    使用 Ant 的一大优势在于它的扩展性。除了内置任务,开发者可以通过实现 `Task` 接口创建自己的任务,这使得 Ant 能够处理几乎任何类型的构建需求。XML 配置文件的结构清晰,使得多人协作变得容易,也方便自动化工具...

    讲解Ant的应用

    Apache Ant是一个专门为Java项目设计的自动化构建工具,它的出现是为了满足开发者在跨平台项目构建时遇到的种种问题。在1998年,当时的构建工具如GNUMake、批处理文件和shell脚本都不能很好地支持跨平台的构建,于是...

    对于ANT的概述

    - **ANT与MyEclipse的区别**:ANT是一种独立的构建工具,而MyEclipse则是一款集成开发环境(IDE),两者的主要区别在于作用范围。MyEclipse提供了一个全面的开发环境,包括代码编辑、调试等功能;而ANT专注于构建...

    ant学习指南 ANT是一个基于Java的自动化脚本引擎

    Ant的强大之处在于其插件系统,允许扩展以支持更多的任务和功能。通过引入额外的Ant任务库,你可以调用各种工具,如数据库管理工具、版本控制系统,甚至执行复杂的自动化流程。 总的来说,Ant是一个强大的自动化...

    ant脚本资料ant

    5. **Ant的扩展性** - **自定义任务**:可以通过实现Ant Task接口创建自己的任务,以满足特定需求。 - **第三方插件**:许多第三方库提供了Ant任务,如Maven的Ant Tasks,方便在Ant中调用Maven的功能。 6. **实际...

    ant工具的使用

    总的来说,Ant是一个强大且灵活的构建工具,它的XML配置文件和Java扩展机制确保了构建过程的可读性和可移植性。通过定义和组织任务目标,开发者能够轻松地自动化Java项目的构建过程,无论项目大小或复杂程度。尽管...

    ant 使用指南-ant入门

    Ant是Apache软件基金会的一个开放源码项目,是一个基于Java的构建工具,它的设计...Ant的简单性和可扩展性使其成为Java开发中的一个强大工具,无论你是初次接触还是希望替换现有的构建系统,Ant都是值得考虑的选择。

Global site tag (gtag.js) - Google Analytics