`
weigang.gao
  • 浏览: 491286 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

BuildSql Ant自定义任务传参

 
阅读更多

在实际应用中

工程的目录结构以及所需的jar包如下:

 

1.自定义Ant任务:DefAntTask.java

自定义Ant任务一般来说需要继承Task类,但是这不是必须,只要DefAntTask中有public void execute()方法就行了。

package com.hsp.tasks;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class DefAntTask{
	
	private String name;
	
	private String password;
	
	private File destfile;
	
    private List<BuildTask> generators = new ArrayList<BuildTask>();
	
	public  void execute(){
		/**
                 问题1: BUILD FAILED
           G:\workspace\DefAntTaskTest_03\build.xml:48: taskdef class com.hsp.tasks.DefAntTask cannot be found
           using the classloader AntClassLoader[]
                解决:在自定义任务中 正确配置classpath 即可
		 */
		
		System.out.println("def Ant task....");
		
		System.out.println("name:"+name);
		System.out.println("password:"+password);
		
		System.out.println(destfile.getAbsolutePath());
		
		for (BuildTask task : generators) {
			task.test(); 
		}
	}
	/**
	 *  1.<hkTask /> :会导致调用createHkTask 方法创建一个hkTask
	 *  2.createHkTask必须有返回值,返回一个hkTask任务
	 */
	public BuildTask createHkTask() {
		BuildTask buildTask = new HKBuildTask();
		generators.add(buildTask);
		return buildTask; 
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public File getDestfile() {
		return destfile;
	}

	public void setDestfile(File destfile) {
		this.destfile = destfile;
	}


}

 

2.编写一个接口 BuildTask.java

package com.hsp.tasks;

public interface BuildTask{ 
	/**
	 * 测试方法
	 */
    public void test();	

}

 

3.编写接口BuildTask的实现类 HKBuildTask.java

package com.hsp.tasks;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

public class HKBuildTask extends Task implements BuildTask{
  
	@Override
	public void test() {
		log("exec  hkTask  test method .....");
		
	}
	@Override
	public void execute() throws BuildException {
		log("exec hkTask execute method....");
	}


}

 

4.build.xml内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== 
     2015年3月29日 下午10:20:43                                                        

     project    
     description
                   
     gaoweigang                                                                
     ====================================================================== -->
<project name="project" default="execute">
	<description>
            description
    </description>
	<!--Ant执行日志,输出到指定文件,目录log要提前创建好-->
	<record name="D:/log/test.log" loglevel="info" append="no" action="start" />

	<property name="build.classes" location="build/classes" />

	<property name="build.libs" location="lib" />
	<echo message="输出lib目录的完成路径:">${build.libs}</echo>

	<target name="init">
		<mkdir dir="${build.classes}" />
	</target>

	<path id="classpath">
		<pathelement location="${build.classes}"/>
		<fileset dir="${build.libs}">
			<include name="**/*.jar" />
		</fileset>
	</path>

	<target name="compile" depends="init">
		<!--编译 实现的自定义任务DefAntTask.java,生成的class文件位于${build.classes}中-->
		<javac srcdir="src" destdir="${build.classes}" includeantruntime="false">
			<classpath refid="classpath" />
		</javac>
	</target>

	<target name="execute" depends="compile">
		<!--定义任务-->
		<taskdef name="defAntTask" classname="com.hsp.tasks.DefAntTask" >
	       <classpath refid="classpath"></classpath>
		</taskdef>
		<!--调用执行自定义任务,并且向任务类传递属性-->
		<defAntTask name="gaoweigang" password="123456" destfile="./src">
			<hkTask /><!--调用DefAntTask类中createHkTask() 创建任务hkTask-->z
		</defAntTask>
	</target>

</project>

 

5.执行构建文件build.xml,输出如下:


 

 

可能遇到的问题:
1.ant编译中出现“includeantruntime was not set”警告的问题,如下:

 [javac]  G:\workspace\DefAntTaskTest_03\build.xml:32: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

解决:

执行ant编译时,总会出现如下的警告:

[javac] D:\SnowPad\build.xml:26: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

虽然不影响编译,但还是解决才安心。其实解决方法也很简单,只需要根据提示在javac任务中添加includeAntRuntime="false"属性即可。例如:

修改前:

    <javac srcdir="${srcDir}" destdir="${binDir}" />

修改后:

    <javac srcdir="${srcDir}" destdir="${binDir}" includeAntRuntime="false" />

注:

①.对于includeAntRuntime属性,官方的解释如下:

    Whether to include the Ant run-time libraries in the classpath; defaults to yes, unless build.sysclasspath is set. It is usually best to set this to false so the script's behavior is not sensitive to the environment in which it is run.

 

②.此警告在较早的ant版本中可能不会出现,当前用的版本是:Apache Ant(TM) version 1.8.2 compiled on December 20 2010。所以此问题跟ant版本有关。

 

2.[javac] 注意:G:\workspace\DefAntTaskTest_03\src\com\hsp\tasks\DefAntTask.java 使用了未经检查或不安全的操作。
   [javac] 注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
解决:

在jre1.6的环境中,范型的使用都会报类似警告

即支持范型的容器应该定义范型类型然后再使用,或者,在方法前加一个忽略注释:

1. 定义范型类型,注意对应的getters 与setters方法也需要加范型

ArrayList<String> al=new ArrayList<String>();  

2. 方法前加入 忽略注释

@SuppressWarnings("unchecked") 

 

  • 大小: 12 KB
  • 大小: 13.5 KB
分享到:
评论

相关推荐

    Ant自定义任务

    Ant以其灵活性和可扩展性,允许开发者自定义任务以满足特定的项目需求。本文将深入探讨“Ant自定义任务”的概念、实现方式以及实际应用。 Ant是基于XML的构建工具,其主要任务定义在名为`build.xml`的文件中。默认...

    ant自定义任务

    ### ant自定义任务详解 在构建自动化工具领域,Apache Ant是一个强大的开源软件项目,用于编译、测试和部署Java应用程序。Ant使用XML来定义构建过程,使得自动化构建流程变得直观和可配置。然而,Ant的强大之处不仅...

    [北京圣思园Ant深入详解]_004.实现自定义Ant任务

    在Ant的世界里,自定义任务是扩展其功能的关键方式之一,允许开发者根据特定项目需求创建自己的构建步骤。Ant是Apache软件基金会的一个项目,它是一个基于Java的构建工具,广泛用于管理Java项目的构建、编译、测试和...

    记录一个关于如何实现Ant自定义task,并且进行有效单元测试的例子

    本文将深入探讨如何自定义Ant任务并进行有效的单元测试,以提升开发效率和代码质量。 首先,理解Ant的自定义任务机制。Ant允许开发者通过继承`org.apache.tools.ant.Task`类或`org.apache.tools.ant.UnknownElement...

    ant配置文件

    在实际使用中,Ant通常会包含各种任务和贡献的库,比如JUnit任务用于执行单元测试,或者Ant-Contrib库提供了更多的自定义任务。 总的来说,Ant是Java项目中不可或缺的构建工具,通过合理的配置,它可以实现项目的...

    自定义ant task 验证POM文件版本依赖

    在Java开发中,Apache Ant是一个广泛使用的自动化构建工具,它允许开发者通过XML配置文件定义任务来构建、测试和部署项目。本话题将深入探讨如何利用Ant的可扩展性,自定义一个Task来验证POM(Project Object Model...

    antdv ant-design-vue 自定义主题颜色.pdf

    在Ant Design Vue (antdv) 中,自定义主题颜色是一项常见的需求,这使得开发者可以根据自己的品牌风格或设计规范调整UI的颜色。本篇文章将详细介绍两种不同的方法来实现这一目标。 首先,我们来看第一种方法,即...

    ant junit report 自定义

    ant junit report 自定义

    自定义AntTask简单实例

    Ant的核心功能包括编译、测试、打包和部署等,但有时这些预定义的任务并不能满足特定项目的需求。这时,我们可以自定义Ant Task,扩展Ant的功能。本教程将通过一个简单的实例,讲解如何创建和使用自定义Ant Task。 ...

    [北京圣思园Ant深入详解]_003.Ant目标深度详解、使用Ant的各种任务

    Ant内置了大量预定义的任务,同时也允许用户自定义任务以满足特定需求。一些常见的Ant任务包括`&lt;copy&gt;`(复制文件或目录)、`&lt;javac&gt;`(编译Java源代码)、`&lt;mkdir&gt;`(创建目录)和`&lt;jar&gt;`(创建JAR文件)等。 让...

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

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

    使用Ant进行java开发

    通过学习Ant,Java开发者可以更加高效地管理项目构建过程,同时借助Ant提供的丰富任务集,可以扩展自定义任务,实现特定的构建逻辑。Ant的灵活性还体现在它可以通过引入第三方库来实现各种自定义任务,例如进行代码...

    org.apache.tools.ant.jar(1.9.7)

    ant自定义任务时需要继承org.apache.tools.ant.Task类,而MyEclipse居然没有这个jar包.费了好大劲找到个,版本还算新.

    ant ant ant ant

    3. **可配置性**:用户可以根据自己的需求自定义任务,或者通过引入第三方任务库来扩展功能。 4. **跨平台**:由于其基于Java,Ant可以在任何安装了Java运行环境的平台上运行,这极大地方便了跨平台的开发工作。 在...

    基于 vue、ant-design-vue 的自定义Antdv 工作流组件

    本项目“基于vue、ant-design-vue的自定义Antdv工作流组件”就是一个这样的解决方案,旨在提供一个高度可定制、功能丰富的Web工作流平台。 首先,我们要理解Vue.js,它是一个轻量级的前端框架,以其易学易用、高效...

    react 关于自定义样式引入和ant-design样式引入配置问题

    在React开发过程中,为了实现应用的个性化样式设计和利用第三方库如Ant Design的美观组件,我们需要正确地管理和引入自定义样式以及库样式。本话题主要关注如何在React项目中配置Webpack或其他构建工具,以实现...

    ant build脚本代码

    本文将深入探讨Ant Build脚本及其在自动化多渠道打包和自定义任务打包中的应用。 Ant的核心概念是构建文件(build.xml),它是用XML编写的,定义了一系列的目标(target)和任务(task)。每个目标由一系列的任务...

    Ant 1.9.1 学习笔记

    Ant的任务分为三类:核心任务、可选任务和用户自定义任务。核心任务是Ant自带的,可选任务需要额外的JAR文件,用户自定义任务则是用户自己开发的任务。 ### Ant的其他元素 Ant构建文件中除了`&lt;project&gt;`和`&lt;target&gt;...

Global site tag (gtag.js) - Google Analytics