首页 > 其他分享 >为Ant开发扩展任务

为Ant开发扩展任务

时间:2023-06-04 14:35:56浏览次数:33  
标签:Task void 扩展 Ant 任务 apache org tools public

[url]http://lujar.iteye.com/blog/154490[/url]

[b]第二篇调试文章,会说出第一篇文章的不足,并提供更好的方式。[/b]




[b]两种方式[/b]

为Ant实现扩展任务其实是非常容易的,只需按照以下几个步骤即可:

1. 创建一个Java类继承org.apache.tools.ant.Task类;

2. 对每个属性实现set方法。Ant会根据需要自动完成类型转换;

3. 如果扩展的任务需要嵌套其它的Task,那么这个Java类必需实现接口org.apache.tools.ant.TaskContainer;

4. 如果扩展的任务要支持Text,需要增加一个方法void addText(String);

5. 对每个嵌套的元素,实现create、add 或 addConfigured 方法;

6. 实现public void execute方法;

7. 在build.xml文件中使用 <taskdef> 来引用自定义的Task。

下面以一个简单的例子来说明如何为Ant增加一个hello任务,它可以连续打印多条信息,打印的次数由属性count指定,而打印的内容则由它内嵌的一个helloinfo任务的message属性指定,看上去这非常类似JSP中自定义标签的一些概念,实现代码如下:

//HelloInfoTask.java

package com.sharetop.antdemo;

import org.apache.tools.ant.*;

public class HelloInfoTask {
	private String msg;

	public void execute() throws BuildException {
		System.out.println(msg);
	}

	public void setMessage(String msg) {
		this.msg = msg;
	}
}




下面是外部Task类的代码:



//HelloTask.java


package com.sharetop.antdemo;

import org.apache.tools.ant.*;

public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer {
	private Task info;
	private int count;

	public void execute() throws BuildException {
		for (int i = 0; i < count; i++)
			info.execute();
	}

	public void setCount(int c) {
		this.count = c;
	}

	public void addTask(Task t) {
		this.info = t;
	}
}




实现了这两个Task,在build.xml文件中定义它的task name,就可以在Target中执行它了。如果你不想使用 <taskdef> 标签来定义Task,也可以通过修改default.properties文件来实现引入新Task,这个文件位于org.apache.tools.ant.taskdefs 包里。下例是一个使用 标签来引入新Task的Build文件部分:


[color=red]第一种方式:[/color]


<target name="hello" depends="client">
	<taskdef name="hello" classname="com.sharetop.antdemo.HelloTask" classpath="client.jar" />
	<taskdef name="helloinfo" classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar" />
	<hello count="3">
		<helloinfo message="hello world" />
	</hello>
</target>






[b][color=blue]不同的是把taskdef定义在target的外部[/color][/b]



<path id="xdoclet.task.classpath">
         <fileset dir="${xdoclet.home}/lib">
         <include name="**/*.jar"/>
         </fileset>
         <fileset dir="${xdoclet.home}/plugins">
         <include name="**/*.jar"/>
         </fileset>
   </path>
    <taskdef
       name="xdoclet"
       classname="org.xdoclet.ant.XDocletTask"
       classpathref="xdoclet.task.classpath"
    />




定义完任务之后,就可以来使用它了,如:



<target name="生成Hibernate配置文件">
       <xdoclet>
           <fileset dir="${src.dir}/com/bjsxt/oa/model">
              <include name="**/*.java"/>
           </fileset>       
           <component
              classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin"
              destdir="${src.dir}"
              version="3.0"
              hbm2ddlauto="update"
              jdbcurl="jdbc:mysql://127.0.0.1/oa_200706"
              jdbcdriver="com.mysql.jdbc.Driver"
              jdbcusername="root"
              jdbcpassword="mysql"
              dialect="org.hibernate.dialect.MySQLDialect"
              showsql="true"
           />
       </xdoclet>
    </target>

标签:Task,void,扩展,Ant,任务,apache,org,tools,public
From: https://blog.51cto.com/u_3871599/6410581

相关文章

  • 【React工作记录八十六】React+Hook+ts+antDesignMobile实现input自动获取功能
    前言大家好我是歌谣今天继续处理工作遇到的问题目前要做的问题是移动端需要做一个进入页面获取焦点的功能实现演示核心代码input上面绑定refs<InputonChange={handleChange}ref={inputRef}placeholder="请输入条形编码或者扫码录入"/>定义状态constinputRef:any=useRef(nul......
  • AntDesign中a-menu的使用案例
    <template><divclass="nav-bar":class="{collapsed:collapsed}"><divclass="collapse-btn"@click="toggleCollapsed"><a-icon:type="collapsed?'menu-unfold':'......
  • Python潮流周刊#5:并发一百万个任务要用多少内存?
    你好,我是猫哥。这里记录每周值得分享的Python及通用技术内容,部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)博客原文:https://pythoncat.top/posts/2023-06-03-weekly5文章&教程1、并发一百万个任务要用多少内存?(英文)文中测试了主流的编......
  • Incrementer:Transformer for Class-Incremental Semantic Segmentation with Knowledg
    摘要目前已有的连续语义分割方法通常基于卷积神经网络,需要添加额外的卷积层来分辨新类别,且在蒸馏特征时没有对属于旧类别/新类别的区域加以区分。为此,作者提出了基于Transformer的网络incrementer,在学习新类别时只需要往decoder中加入对应的token。同时,作者还提出了对于旧类别区......
  • odoo 定时任务
    <recordid="schedule_statistic_num_sum"model="ir.cron"><fieldname="name">加载发票</field><fieldname="model_id"ref="model_hr_expense_invoicesource_head"/>......
  • 【React工作记录八十三】React+Hook+ts+antDesign实现table行编辑功能
    前言大家好我是歌谣今天要说的是antdesign实现表格行编辑的功能考虑问题的时候我们需要多看官方的api开发开始紧接着我们对照着api进行开发首先加一个table<TableonChange={onTableChange}rowKey="id"......
  • Intersection Observer API 交叉观察器 API vue3 antd table 滚动加载 使用过程
    需求:表格滚动加载做法:步骤一:给表格最后一行添加特定标识,类名或者id等组件库https://www.antdv.com/components/table-cn#APIwebApihttps://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API组件名table添加类名的组件方法rowClassName使用例子::......
  • 首次进入Mysql修改密码报“The MySQL server is running with the --skip-grant-table
    第一次安装完mysql,修改默认密码的时候,报“TheMySQLserverisrunningwiththe--skip-grant-tablesoptionsoitcannotexecutethisstatement”。先刷新mysql然后再重新修改密码即可。mysql>ALTERUSER'root'@'localhost'IDENTIFIEDBY'123456';ERROR1290(H......
  • 任务调度之Azkaban
    针对数据仓库中的任务脚本我们前面已经整理过了,任务脚本还是比较多的,针对初始化表的脚本只需要执行一次即可,其它的脚本需要每天都执行一次,这个时候就需要涉及到任务定时调度了。Crontab调度器的使用咱们前面在学习Linux的时候学过一个crontab调度器,通过它可以实现定时执行指定的......
  • Ubantu使用n升级Node提示权限不够
    升级Node时,常见以下问题:使用nstable时提示权限不够(base)zibuyu@ubuntu:~/Desktop/luffy$nstableinstalling:node-v18.16.0mkdir:/usr/local/n/versions/node/18.16.0mkdir:无法创建目录“/usr/local/n”:权限不够而使用sudonstable时又提示找不到命令......