随便记一下 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标签和自定义任务的更多相关文章

  1. 剖析html对标准标签和自定义标签闭合与不闭合渲染问题

    昨天在修改去年写的系统的时候无意中看到了当时写的一个利用标准标签未闭合在单元格内把整个单元格颜色渲染成红色的效果,如下: 当时的问题是从后台返回来的是个int整数而%是写在页面上的如图 这 时候就出现 ...

  2. dedecms利用memberlist标签调用自定义会员模型的会员信息

    [摘要]本文讲一下dedecms如何利用memberlist标签调用自定义会员模型的会员信息. dedecms利用memberlist标签调用自定义会员模型的会员信息,这个问题找了很久,官方论坛提问过 ...

  3. 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 ...

  4. [原创]java WEB学习笔记42:带标签体的自定义标签,带父标签的自定义标签,el中自定义函数,自定义标签的小结

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. jquery遍历标签中自定义的属性方法

    在开发中我们有时会对html标签添加属性,如何遍历处理 <ul> <li name="li1" sortid="nav_1">aaaaa ...

  6. Django框架(七)—— 模板层:变量、过滤器、标签、自定义标签和过滤器

    目录 模板层:变量.过滤器.标签.自定义标签和过滤器 一.模板层变量 1.语法 2.使用 二.模板层之过滤器 1.语法 2.常用过滤器 3.其他过滤器 三.模板值标签 1.for标签 2.if标签 3 ...

  7. 从零开始学spring源码之xml解析(二):默认标签和自定义标签解析

    默认标签: 上一篇说到spring的默认标签和自定义标签,发现这里面东西还蛮多的.决定还是拆开来写.今天就来好好聊聊这两块是怎么玩的,首先我们先看看默认标签: private void parseDe ...

  8. Ant—Ant标签解释

            采用ant命令必须写ant命令脚本,脚本由非常多Ant标签组成.现在总结一下我也遇到过Ant标签: 版权声明:本文博主原创文章,博客,未经同意不得转载.

  9. [Ant]Ant简易教程

    前言 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. Ant是纯Java语言编写的,所以具有 ...

随机推荐

  1. Android后台的linux一直保持唤醒状态,不进入睡眠

    由于要做Android手机的电池续航测试,是不能插usb的,所以把case放到sh文件中,之后push到手机里,执行的. 但是出现个问题,假如case中有很长时间的sleep操作,关闭手机屏幕,这样l ...

  2. Elasticsearch安装---安装jdk

    1.在Linux 上检查Java版本是否满足要求: java -version 如果运行上面命令时报错:-bash: java: command not found,首先检查是否有jdk ,要是有安装 ...

  3. SPOJ FFT TSUM

    第一道FFT的题目. 在网上找了很多FFT的资料,但一直都看不懂,最后是看算法导论学的FFT,算法导论上面写的很详细,每一步推导过程都有严格的证明. 下面说这道题 题意: 给一个序列s,有n个不互相同 ...

  4. HDU 3376 费用流 Matrix Again

    题意: 给出一个n × n的矩阵,每个格子中有一个数字代表权值,找出从左上角出发到右下角的两条不相交的路径(起点和终点除外),使得两条路径权值之和最大. 分析: 如果n比较小的话是可以DP的,但是现在 ...

  5. 【Luogu】P2389电脑班的裁员(DP)

    题目链接 sbt交了三遍才过是我的耻辱…… 就是设f[i][j]搞个三重循环DP一下,以上. #include<cstdio> #include<cstdlib> #inclu ...

  6. [BZOJ3585][BZOJ3339]mex

    [BZOJ3585][BZOJ3339]mex 试题描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入 第一行n,m.第二行为n个数.从 ...

  7. Spring和redis简单测试demo

    1.1 首先创建一个Maven工程 File --> New --> Other,然后选择Maven目录下的Maven Project,如下图: 然后在弹出的面板中选择配置后,下一步即可, ...

  8. hibernate 4.3 在使用获取数据获取不到数据库中最新变更的数据问题解决

    hibernate 4.3 在使用获取数据获取不到数据库中最新变更的数据问题解决,应该是因为缓存问题 问题过程和现象: 查询一个数据列表=>数据库中手动update了数据=>刷新页面,数据 ...

  9. xsy 1845 - GCD

    from NOIP2016模拟题34 Description 给定一个长度\(n\le 10^6\)的序列, 给定\(A, B\) 给出一个序列,要求你通过如下两个操作使得序列中所有数的最大公约数大于 ...

  10. 我要好offer之 网络大总结

    1. TCP协议的状态机 TCP一共定义了11种状态,这些状态可以使用 netstat 命令查看 @左耳朵耗子 tcp系列教程: 上篇 下篇 2. TCP建立连接3次握手.释放连接4次握手 TCP包头 ...