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") 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想要自定义 Ant Design 的 Button 样式,可以按照以下步骤操作: 1. 创建一个 less 文件,比如说 `custom-button.less`,并在其中写入自定义的样式。 2. 在你的 React 组件中引入这个 less 文件。比如说,在一个名为 `MyButton` 的组件中,你可以这样做: ```jsx import React from 'react'; import './custom-button.less'; import { Button } from 'antd'; function MyButton(props) { return ( <Button {...props}> {props.children} </Button> ); } export default MyButton; ``` 3. 在 `custom-button.less` 文件中,你可以使用 Ant Design 的 Mixin 来定义你的自定义样式。比如说,你可以这样写: ```less .custom-button { .ant-btn { background-color: #ff0000; border: none; &:hover { background-color: #ff6666; border: none; } } } ``` 这里,我们使用了 Ant Design 的 `.ant-btn` Mixin 来定义按钮的样式。注意,我们还使用了 `&:hover` 来定义鼠标悬停时的样式。 4. 最后,在你的组件中使用你的自定义样式。比如说,在 `MyButton` 组件中,我们可以这样写: ```jsx import React from 'react'; import './custom-button.less'; import { Button } from 'antd'; function MyButton(props) { return ( <Button {...props} className="custom-button"> {props.children} </Button> ); } export default MyButton; ``` 这里,我们使用了 `className="custom-button"` 来应用我们定义的样式。这样,我们的自定义样式就应用到了 Ant Design 的 Button 组件上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值