Ant -----ant标签和自定义任务
随便记一下 Ant的用法吧。ant ,maven, gradle ,三个打包工具到齐了,Ant 常见标签解析,ant 自定义task 。
<?xml version="1.0" encoding="UTF-8"?>
<project name="pase2" default="allElements">
<property environment="env" />
<!-- ===================================================================== -->
<!-- Run a given ${target} on all elements being built -->
<!-- Add on <ant> task for each top level element being built. -->
<!-- ===================================================================== -->
<available property="allElementsFile" file="${builder}/allElements.xml" value="${builder}/allElements.xml"/>
<property name="allElementsFile" location="${eclipse.pdebuild.templates}/headless-build/allElements.xml"/>
<import file="${allElementsFile}" />
<target name="allElements">
<antcall target="allElementsDelegator" />
</target>
<target name="getBaseComponents" unless="skipBase">
<get src="${eclipseBaseURL}" dest="${buildDirectory}/../temp-base.zip" />
<unzip dest="${base}" overwrite="true" src="${buildDirectory}/../temp-base.zip" />
</target>
<!--文件打包-->
<target name="local-zip">
<zip destfile="${local_home}/目标文件夹名.zip">
<zipfileset dir="${local_home}/myproject/"/>
</zip>
</target>
<!--path标签-->
<path id="build.classpath.jar">
<pathelement path="${env.J2EE_HOME}/${j2ee.jar}"/>
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
</path>
<!--get标签 get一组文件-->
<get usetimestamp="true" verbose="true" dest="${antfile.dir}/36ria-index.html" src="http://www.36ria.com/"></get>
<get dest="downloads">
<url url="http://ant.apache.org/index.html"/>
<url url="http://ant.apache.org/faq.html"/>
</get>
<!--touch 文件 -->
<touch file="myfile"></touch>
<!--指定touch 时间-->
<touch datetime="18/10/2010 2:02 pm" file="myfile"></touch>
<!--文件中字符串替换-->
<replace file="configure.sh" token="token" value="value"/>
<property name="a" value="aaa" />
<!--
<property name="b" value="bbb" />
-->
<!--condition的用法-->
<!-- 如果设置了属性b则值为${b},否则值为${a}-->
<condition property="val" value="${b}" else="${a}">
<!-- 判断是否设置了指定属性 -->
<isset property="b" />
</condition>
<target name="clean" unless="noclean">
<antcall target="allElements">
<param name="target" value="cleanElement" />
</antcall>
</target>
<!--ant 删除任务-->
<delete file="../tmpcopy/filter.txt" />
<delete dir="../tmpcopy/afterfilter" />
<delete includeEmptyDirs="true" failonerror="failonerror">
<fileset dir="../tmpcopy/new"/>
</delete>
<cvs cvsRoot="${mapsRepo}" package="${mapsRoot}" dest="${buildDirectory}/maps" tag="${mapsCheckoutTag}" />
<!--available 验证文件或者目录的标签-->
<available property="is" type="file" file="${ui}"></available>
<!--ant 编译任务-->
<javac
nowarn="on"
source="1.6"
target="1.6"
deprecation="true"
debug="true" encoding="UTF-8"
srcdir="${base.src.dir}"
destdir="${classes.dir}"
classpathref="lib.class.path" >
</javac>
<!--ant svn 操作-->
<svn>
<delete>
<fileset dir="workingcopy/deleteTest">
<include name="**/*.del"/> </fileset>
</delete>
<commit message="commit deleted files" dir="workingcopy/deleteTest"/>
</svn>
<!--自定义task-->
</project>
大概就那么几个标签,不常见的以后再补。
<replace dir ="." includes="*.txt" encoding="GBK">
<replacefilter token ="Task" value="that" />
</replace>
说明 字符串替换标签。 并且是批量进行的。
Mkdir
创建一个目录,如果他的父目录不存在,也会被同时创建。
例子:<mkdir dir="build/classes"/> 说明: 如果build不存在,也会被同时创建
Copy
拷贝一个(组)文件、目录
例子:
1. 拷贝单个的文件:<copy file="myfile.txt" tofile="mycopy.txt"/>
2. 拷贝单个的文件到指定目录下 <copy file="myfile.txt" todir="../some/other/dir"/>
3. 拷贝一个目录到另外一个目录下
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
拷贝一批文件到指定目录下
<copy todir="../dest/dir">
<fileset dir="src_dir">
<exclude name="**/*.java"/>
</fileset>
</copy>
<copy todir="../dest/dir">
<fileset dir="src_dir" excludes="**/*.java"/>
</copy>
拷贝一批文件到指定目录下,将文件名后增加。Bak后缀
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<mapper type="glob" from="*" to="*.bak"/>
</copy>
拷贝一组文件到指定目录下,替换其中的@标签@内容
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Foo Bar"/>
</filterset>
</copy>
Delete
删除一个(组)文件或者目录
例子:
1. 删除一个文件
<delete file="/lib/ant.jar"/>
2. 删除指定目录及其子目录
<delete dir="lib"/>
3. 删除指定的一组文件
<delete>
<fileset dir="." includes="**/*.bak"/>
</delete>
4. 删除指定目录及其子目录,包括他自己
<delete includeEmptyDirs="true">
<fileset dir="build"/>
</delete>
Move
移动或重命名一个(组)文件、目录
例子:
移动或重命名一个文件
<move file="file.orig" tofile="file.moved"/>
移动或重命名一个文件到另一个文件夹下面
<move file="file.orig" todir="dir/to/move/to"/>
将一个目录移到另外一个目录下
<move todir="new/dir/to/move/to">
<fileset dir="src/dir"/>
</move>
将一组文件移动到另外的目录下
<move todir="some/new/dir">
<fileset dir="my/src/dir">
<include name="**/*.jar"/>
<exclude name="**/ant.jar"/>
</fileset>
</move>
移动文件过程中增加。Bak后缀
<move todir="my/src/dir">
<fileset dir="my/src/dir">
<exclude name="**/*.bak"/>
</fileset>
<mapper type="glob" from="*" to="*.bak"/>
</move>
自定义任务
开发非常简单,如下 继承Task 类 ,在execute 里 编写task 内容即可。Jar引用是ant安装目录下lib里自带的ant.jar。示例代码如下:
import org.apache.tools.ant.Task;
public class MyTask extends Task {
@Override
public void execute() {
}
}
用taskdef表签声明自定义任务,属性classname 指定自定义任务类的类名
<target name="mytask" depends="compile">
<taskdef name="mytask" classname="org.zrz.MyTask" classpath="${build.dir}"/>
</target>
Ant自定义任务返回值是通过在继承Task的类中serProperty方法将一个Task属性字段设置进去,然后通过getProject().setNewProperty(propertyName,propertyValue)来进行取值设置。示例代码如下:
import org.apache.tools.ant.Task;
public class MyTask extends Task {
private String name;
private String resultProperty;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setProperty(String resultProperty) {
this.resultProperty = resultProperty;
}
@Override
public void execute() {
//任务处理此处省略
//....
getProject().setNewProperty(resultProperty, name);
}
}
在target里取出返回值
<target name="mytask" depends="compile">
<taskdef name="mytask" classname="org.zrz.MyTask" classpath="${build.dir}"/>
<mytask property="result"
name="Sample"
/>
<echo message="result=${result}"/>
</target>
ant引用三方jar
引用三方jar包时,在ant的build.xml文件中添加子元素path,该path包含引用的三方jar包,形式如下:
<path id="compile.path">
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${build.path}"/>
</path>
其中:path标签的id属性自定义,fileset标签的dir属性为引入三方jar包所在路径(可以是build.xml的相对路径), include标签的name属性表示要包含的jar包(文件)。
在编译时引用三方jar包需要在target标签的子元素标签javac标签下再添加classpath子元素,<classpath refid="compile.path"/> 或者javac标签添加属性classpathref="compile.path" 。
<pathelement path="${build.path}"/>标签是在执行时所用的,该路径是项目java文件编译后所存放的类文件的位置,如果只编译,则不需要,如执行时的target:
<target name="junit" depends="compile">
<junit printsummary="true">
<classpath refid="compile.path"/>
<test name="com.neusoft.cc.test.TestAdd"></test>
</junit>
</target>
完整的build.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project name="Junit" default="junit" basedir=".">
<property name="build.path" value="generator/classes"></property>
<path id="compile.path">
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${build.path}"/>
</path>
<target name="init">
<mkdir dir="${build.path}"/>
</target>
<target name="clean">
<delete dir="${build.path}"></delete>
</target>
<target name="compile" depends="clean,init">
<javac srcdir="src" destdir="${build.path}" classpathref="compile.path" includeantruntime="false"/>
</target>
<target name="junit" depends="compile">
<junit printsummary="true">
<classpath refid="compile.path"/>
<test name="com.neusoft.cc.test.TestAdd"></test>
</junit>
</target>
</project>
Ant -----ant标签和自定义任务的更多相关文章
- 剖析html对标准标签和自定义标签闭合与不闭合渲染问题
昨天在修改去年写的系统的时候无意中看到了当时写的一个利用标准标签未闭合在单元格内把整个单元格颜色渲染成红色的效果,如下: 当时的问题是从后台返回来的是个int整数而%是写在页面上的如图 这 时候就出现 ...
- dedecms利用memberlist标签调用自定义会员模型的会员信息
[摘要]本文讲一下dedecms如何利用memberlist标签调用自定义会员模型的会员信息. dedecms利用memberlist标签调用自定义会员模型的会员信息,这个问题找了很久,官方论坛提问过 ...
- Archive for required library: 'E:/repository/org/apache/ant/ant/1.7.1/ant-1.7.1.jar' in project 'test02' cannot be read or is not a valid ZIP file
Archive for required library: 'E:/repository/org/apache/ant/ant/1.7.1/ant-1.7.1.jar' in project 'tes ...
- [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- jquery遍历标签中自定义的属性方法
在开发中我们有时会对html标签添加属性,如何遍历处理 <ul> <li name="li1" sortid="nav_1">aaaaa ...
- Django框架(七)—— 模板层:变量、过滤器、标签、自定义标签和过滤器
目录 模板层:变量.过滤器.标签.自定义标签和过滤器 一.模板层变量 1.语法 2.使用 二.模板层之过滤器 1.语法 2.常用过滤器 3.其他过滤器 三.模板值标签 1.for标签 2.if标签 3 ...
- 从零开始学spring源码之xml解析(二):默认标签和自定义标签解析
默认标签: 上一篇说到spring的默认标签和自定义标签,发现这里面东西还蛮多的.决定还是拆开来写.今天就来好好聊聊这两块是怎么玩的,首先我们先看看默认标签: private void parseDe ...
- Ant—Ant标签解释
采用ant命令必须写ant命令脚本,脚本由非常多Ant标签组成.现在总结一下我也遇到过Ant标签: 版权声明:本文博主原创文章,博客,未经同意不得转载.
- [Ant]Ant简易教程
前言 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. Ant是纯Java语言编写的,所以具有 ...
随机推荐
- poj 1017 装箱子问题 贪心算法
题意:有1*1到6*6的的东西,需要用6*6的箱子将它们装起来.问:至少需要多少个6*6箱子 思路: 一个瓶子怎么装东西最多?先装石头,在装沙子,然后装水. 同样放在本题就是先装6*6然后5*5... ...
- JAVA里的单引号和双引号及String和char的区别
JAVA里的单引号和双引号及String和char的区别 单引号引的数据 是char类型的双引号引的数据 是String类型的单引号只能引一个字符而双引号可以引0个及其以上 ************* ...
- JavaSE——Java对象导论
一.抽象过程 人们所能够解决问题的复杂性直接取决于抽象的类型和质量.所谓抽象的类型指的是抽象的是什么,汇编语言是对底层机器的轻微抽象,命令式语言(FORTRAN.BASIC.C)是对汇编语言的抽象.这 ...
- Hadoop4.2HDFS测试报告之四
第二组:文件存储读过程记录 测试系统组成 存储类型 测试程序或命令 测试文件大小(Mb) 文件个数(个) 客户端并发数(个) 读速率 (M/s) NameNode:1 DataNode:1 本地存储 ...
- Selenium WebDriver- 通过源码中的关键字找到我们要操作的句柄,用于多个窗口之间切换
#encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...
- day01_13.数组
数组基本语法 <?php $a = array(键1=>值1,键2=>值2); ?> <?php $arr = array(1=>'张三的裤子',2=>'李四 ...
- 数据库导入Exel,输入到浏览器
db.php <?php require dirname(__FILE__)."/dbconfig.php";//引入配置文件 class db{ public $conn= ...
- 【NOIP2016】愤怒的小鸟 搜索
题目描述 Kiana 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0,0)(0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟,小 ...
- 编译TensorFlow CPU指令集优化版
编译TensorFlow CPU指令集优化版 如题,CPU指令集优化版,说的是针对某种特定的CPU型号进行过优化的版本.通常官方给的版本是没有针对特定CPU进行过优化的,有网友称,优化过的版本相比优化 ...
- Django创建
Pycharm里面Django模块安装及项目创建和启动: Pycharm里面Django模块安装(也可以指定安装源): 创建Django项目: 注意切换到合适的目录进行安装 diango-admin ...