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语言编写的,所以具有 ...
随机推荐
- 水题:CF16C-Monitor
Monitor 题目描述 Reca company makes monitors, the most popular of their models is AB999 with the screen ...
- Prolog&Epilog
这篇博客会简单介绍一下Prolog&Epilog 然后再简单介绍下我对于程序在计算机中到底如何运行的一些理解(因为自己之前也从来没有接触过这些方面的知识,所以如果有讲的不对的地方希望大家能够帮 ...
- Java-创建一个线程
第一种继承Thread类 package com.tj; public class BasicThread1 extends Thread { public void run() { System.o ...
- LSTM 应用于股票市场
https://zhuanlan.zhihu.com/p/27112144 1.LSTM对于非平稳数据的预测效果没有平稳数据好 2.神经网络的过拟合:在训练神经网络过程中,“过拟合”是一项尽量要避免的 ...
- ThreeJs 3D 全景项目开发总结
本文来自网易云社区 作者:唐钊 项目背景 那是在一个毫无征兆的下午,我还沉浸在 vue 的世界中,突然编辑跑过来说N的新官网想做一些3D全景的东西,一开始其实我的内心是拒绝的,一是没怎么实质性做过 W ...
- 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)
使用前提 查询表必须有ID字段,且该字段不能重复,建议为自增主键 背景 如果使用ADO.NET进行开发,在查询分页数据的时候一般都是使用分页存储过程来实现的,本文提供一种通用的分页存储过程,只需要传入 ...
- Linux入门(一)
Linux安装的注意问题: 关键的两点: 1)为Linux操作系统准备硬盘空间: 2)启动ISO镜像文件中的安装程序. 前期准备: 1.硬盘分区魔术师 2.grub 纯DOS环境 3.Ub ...
- vs2012打开低版本项目时 出现vs2012警告未能加载包“visual c++ package 解决办法
vs2012 打开 vs2010 项目时 提示的 错误信息. 解决办法 是下载一个 vs2012的 一个补丁包 http://www.microsoft.com/en-us/download/deta ...
- Selenium WebDriver- 操作浏览器的cookie
#encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...
- Ext.js二级联动
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link href ...