Ant自定义任务开发

最近部门在搞持续集成提速,增量构建是个很重要的措施。但是实现增量构建需要识别代码库变化的代码、文件关联到的构建步骤,比如进程编译、后台出包还是其他步骤。当前我们使用的持续集成插件不支持该功能,因此针对我们产品情况,我自己写了一个自定义任务,来进行代码库变化与任务的识别。

我们使用的插件功能都是jar包,通过ant脚本来进行调用,因此实现自定义任务,也就是做一个Ant的自定义任务。

Ant开发自定义任务,一般都是通过java开发,在eclipse中开发,步骤如下:

1、创建java工程;

2、配置工程,引入ant.jar;

3、创建类一定要继承Task;

4、进行自定义功能开发。

比如我做的这个代码库变化与构建任务识别的代码如下:

package com.aaa.CustomTask;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class SelectBuildPhase extends Task {

	private String configFile = "";
	private String deltaFile = "";
	private String destFile = "";
	private ArrayList<BuildPhase> myBuildPhaseArray = new ArrayList<BuildPhase>();

	public String getConfigFile() {
		return configFile;
	}

	public void setConfigFile(String configFile) {
		this.configFile = configFile;
	}

	public String getDeltaFile() {
		return deltaFile;
	}

	public void setDeltaFile(String deltaFile) {
		this.deltaFile = deltaFile;
	}

	public String getDestFile() {
		return destFile;
	}

	public void setDestFile(String destFile) {
		this.destFile = destFile;
	}

	@Override
	public void execute() throws BuildException {
		try {
			parseConfig();
			IsNeedBuild();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void IsNeedBuild() {
		//识别过程
	}

	private void parseConfig() throws JDOMException, IOException {
		SAXBuilder mySAXBuilder = new SAXBuilder();
		InputStream myInputStream = new FileInputStream(configFile);
		Document myDocument = mySAXBuilder.build(myInputStream);
		Element root = myDocument.getRootElement();
		List<Element> elementList = root.getChildren();
		StringBuffer sb = new StringBuffer();
		for(Element outerTemp : elementList){
			List<Element> innerList = outerTemp.getChildren();
			BuildPhase bp = new BuildPhase();
			bp.setName(outerTemp.getAttributeValue("name"));
			bp.setDependsList(outerTemp.getAttributeValue("depends"));
			for(Element inner : innerList){
				sb.append(inner.getAttributeValue("name"));
				sb.append(";");
			}
			bp.setRefDirList(sb.toString());
			myBuildPhaseArray.add(bp);
			sb.delete(0, sb.toString().length());
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SelectBuildPhase sbp = new SelectBuildPhase();
		sbp.setConfigFile("D:\\config.xml");
		sbp.setDeltaFile("D:\\delta.xml");
		sbp.setDestFile("D:\\buildPhase.property");
		sbp.execute();
	}

}

代码完成后,将整个工程打包成一个jar包,然后将该jar包放入%ANT_HOME%\bin下,然后就可以通过taskdef标签来对该功能进行引用了,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="TestCustomTask" default="test">
	<target name="init">
		<taskdef name="SelectBuildPhase"
      classname="com.aaa.CustomTask.SelectBuildPhase"
      classpathref="SelectBuildPhase.jar"
		/>
	</target>
	<target name="test" depends="init">
		<SelectBuildPhase
			configFile="D:\\config.xml"
			deltaFile="D:\\delta.txt"
			destFile="D:\\result.property"
		/>
	</target>
</project>

至此,就完成了自定义任务的开发和使用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 05:17:46

Ant自定义任务开发的相关文章

JSP自定义标签开发入门《转》

JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的). 目标1:自定义一个用表格显示用户信息的简单标签 效果图: 在jsp页面使用此自定义标签: 假设我们有一个UserInfo的javabean,那

android开发——自定义相机开发总结

最近这段时间我一直在开发自定义相机,谷歌了些网上的demo,发现有很多各种各样的问题.最终还是从API的camera类开始学习,进行改进.下面对之前的实现进行一些总结. 官方camera API: http://developer.android.com/guide/topics/media/camera.html 中文翻译: http://www.cnblogs.com/over140/archive/2011/11/16/2251344.html 自定义相机大致实现流程: 预览Camera这

微信公众平台自定义菜单开发——创建菜单

自己从不会到最后做出来,所以好东西必须分享,所以我就给大家写一下过程 1.首先必须是成为微信的开发者,这样才有AppId 和AppSecret 2步就是获取access_token 在你的浏览器上输入https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET (注意连接中得appid=APPID&secret=APPSECRET 分别是你自己在微信

[052] 微信公众平台开发视频公开课第2讲-自定义菜单开发讲解

微信公众平台开发视频公开课第2讲将为大家讲解自定义菜单的相关知识,时间是2014年5月24日20:00-22:00.本次课程的大纲如下: 1.自定义菜单简介 1)如何获得菜单权限 2)菜单按钮分类(click和view) 2.编辑模式下的菜单使用 1)创建菜单 2)预览发布 3)注意事项 3.开发模式下的菜单使用 1)菜单接口介绍 2)如何发起https请求(两种方法,IBM JDK环境) 3)获取access_token 4)如何封装菜单结构 5)创建菜单 6)处理菜单点击事件 7)菜单的查询

javaweb学习总结(二十三)——jsp自定义标签开发入门

一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 package me.gacl.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.jsp.JspException; 7 import

jquery mobile自定义webapp开发实例(一)——前言篇

用jquery mobile做了一段时间的webapp开发,准备用自己的一个小demo做一个模块化的分享 点击demo演示 手机演示二维码: 此demo已经是比较老的版本,用户体验流畅度确实还存在很大的问题,但在我写这一系列的webapp开发实例后,将会解决大部分问题 下面是以后准备写到的一些点: 1:谈谈关于jquery mobile 一些常见问题的解决.(常见问题的解决查看) 2:jquery mobile实现多页面跳转(不是官网上那样把所以的page在一个.html文件内,而是每个page

Flex自定义组件开发之日周月日期选择日历控件

原文:Flex自定义组件开发之日周月日期选择日历控件 使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的任一位置单击时,将弹出一个 DateChooser 控件,显示当月的所有日期.如果未选择日期,则该文本字段为空白,并且 DateChooser 控件中将显示当前日期的月份.当 DateChooser 控件处于打开状态时,用户可以在各个月份和年份之间滚动,并选择某个日期.选择日期后,DateChooser 控件关闭,

自定义菜单 开发 服务器繁忙

错误提示:string(38) "{"errcode":-1,"errmsg":"system error"}" 认证的服务号创建自定义菜单时提示服务繁忙,刚开始我以为是代码逻辑出错,检查测试了一下午,发现代码有没有错. 最后检查出来的错误是编码格式不是  UTF-8    ...............  蛋疼~!~ 自定义菜单 开发 服务器繁忙

Flex自定义组件开发 - jackyWHJ

一般情况下需要组件重写都是由于以下2个原因: 1.在FLEX已有组件无法满足业务需求,或是需要更改其可视化外观等特性时,直接进行继承扩展. 2.为了模块化设计或进一步重用,需要对FLEX组件进行组合. 而Flex组件开发有2种方式: AS方式和MXML方式.对于上述第一个原因我一般采用AS方式,通过继承 UIComponent来开发,而针对原因2我一般使用的是 MXML方式.本文主要讲的是AS开发方式. 重写一个组件依次调用的方法 : 1)Constructor构造方法,初始化属性,默认值 在这