码迷,mamicode.com
首页 > 其他好文 > 详细

Ant自定义任务开发

时间:2015-08-12 21:51:21      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:java   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>
至此,就完成了自定义任务的开发和使用。


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

Ant自定义任务开发

标签:java   ant   

原文地址:http://blog.csdn.net/sswdg123456/article/details/47449687

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!