- 浏览: 961562 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
注意,ant内部定义的特性可以通过eclipse的Debug as ant build来调试,然后在变量中查看
特性有两个特点,它们是不可变的,而且不论在哪里定义,总是属于全局作用域。
不可变说明一旦ant首次处理了键值对,那么这个特性值就不能变了。特性有优先顺序。在ant命令行通过参数传递进去的级别高于其他位置定义的特性。
随后,ant会根据其首次发现的特性声明,来作为第一级的特性。
如
<?xml version="1.0" encoding="utf-8"?>
<project name="测试" default="all" basedir=".">
<property name="one" value="${two}:one" />
<property name="two" value="two" />
<target name="all" description="所有操作,执行顺序是:clean, compile, jar">
<echo message="one=${one}" />
<echo message="${two}" />
</target>
</project>
运行结果:
D:\source\liyixing\ant>d:\soft\liyixing\ant\apache-ant-1.8.2\bin\ant
Buildfile: D:\source\liyixing\ant\build.xml
all:
[echo] one=${two}:one
[echo] two
BUILD SUCCESSFUL
Total time: 0 seconds
这里可以看到one的结果是${two}:one,而不是two:noe
这里有两个原因
因为ant的有加载顺序要确定特性的。它首先处理的是one,而one的时候two还不存在,ant对不存在的变量应用会输出${propertyname}。
DataType
argument,对于由一个ant构建文件调用的程序,向其传递参数
environment,对于一个ant构件文件调用的外部命令或程序,向其传递环境变量。
filelist,定义一个文件的命名列表,这些文件无需存在。
fileset,定义一个文件的命名列表,这些文件必须存在。
patternset(模式),将一组模式分组在一起。
filterset,将一组过滤器分组在一起。
path以某种在不同操作系统间可以移植的方式指定路径。
mapper定义一组输入文件和一组输出文件间的复杂关系。
ant的DataType实现在org.apache.tools.ant.types包中。由org.apache.tools.ant.types.DataType基类派生。EnumeratedAttribute和Commandline和Environment和Reference也被看做是DataType。但他们不是DataType派生。
org.apache.tools.ant.ProjectComponent提供了日志功能,还能访问Project对象。ProjectComponent是各个ant任务的基类。
属性类型:
boolean 完成不区分大小写的字符串比较,将on,true,yes转换成true。其他转换成false
Enum org.apache.tools.ant.types.EnumeratedAttribute实现,用于允许有固定的字符串值集合的情况
File java.io.File指定某个文件或目录的名字。除非另外做说明,否则文件和目录名都相对于项目基目录。
int,long java.lang.Integer和java.lang.Long包装类会处理
Path org.apahce.tools.ant.types.Path常用于classpath和sourcepath属性。用;或者:分隔路径列表。
Reference org.apache.tools.ant.types.Reference 常用于refid属性。对某个类型的id的应用。
String java.lang.String这是ant使用最多的。需要符合xml规范。如>符号需要写成$gt;
argument
<arg>元素由org.apache.tools.ant.types.Commandline.Argument类实现这个DataType
apply exec java任务都接受arg子元素。可以为他们传递参数。
具有的属性
file 作为一个参数的文件名。在构件文件中,此文件名相对于当前的工作目录。在传递过去前,会被转换成一个绝对路径。
line用空格分隔的多个参数的列表
path路径
value一个命令行参数。如果参数中有空格,需要使用这个属性传递。使用line,空格会被解析成多个参数。
每一个arg元素中,上面的属性有且只有一个。
测试
test类
/**
* test
* */
package test;
public class Test{
public static void main(String[] args) {
for(String arg : args) {
System.out.println("arg=" + arg);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<project name="arg元素测试" default="run" basedir=".">
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>
<target name="clean">
<delete file="${result}" />
</target>
<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>
<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
</project>
运行结果
D:\source\liyixing\ant>d:\soft\liyixing\ant\apache-ant-1.8.2\bin\ant
Buildfile: D:\source\liyixing\ant\build.xml
run:
[echo] 开始运行
[java] arg=-IN
[java] arg=test
[java] arg=D:\source\liyixing\ant\build.xml
[java] arg=to to to
[java] arg=D:\source\liyixing\ant\build.xml;D:\build.xml
[echo] 运行结束
[echo] 时间:1605
BUILD SUCCESSFUL
Total time: 0 seconds
可以看出来
属性
line="-IN test"被解析成了两个参数
file="build.xml"传递进去的结果是D:\source\liyixing\ant\build.xml,绝对路径。
value="to to to"被当做一个参数传递
path="build.xml;/build.xml"被解析成了D:\source\liyixing\ant\build.xml;D:\build.xml,在unix中会被解析成
/source/liyixing/ant/(这部分是当前目录)build.xml:/build.xml
environment DataType
对于系统命令的
apply和exec任务,需要0或多个env元素。这个元素指定哪些系统环境要传递给正在执行的系统命令。由 org.apache.tools.ant.types.Environment.Variable类实现。
属性:
file,文件,会被转换成绝对路径
key,必须,环境变量名
path,ant会把它转换成一个本地约定。
value,环境变量的一个直接量值
file,path,value只取其一
测试
编写test.bat
echo off
echo JAVA_HOME = %JAVA_HOME%
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<property name="JAVA_HOME" value="java-home" />
<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>
<target name="clean">
<delete file="${result}" />
</target>
<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>
<exec executable="test.bat">
<env key="JAVA_HOME" value="${JAVA_HOME}" />
</exec>
<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
</project>
<!--
<target name="prepare">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
</target>
<target name="clean" description="删除build目录">
<delete dir="${build.dir}" />
</target>
<target name="compile" description="编译" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>
<target name="jar" description="打包" depends="prepare">
<echo message="${debug.flag}" />
</target>
<target name="all" description="所有操作,执行顺序是:clean, compile, jar" depends="clean, compile, jar">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>-->
运行结果
D:\source\liyixing\ant>d:\soft\liyixing\ant\apache-ant-1.8.2\bin\ant
Buildfile: D:\source\liyixing\ant\build.xml
run:
[echo] 开始运行
[java] arg=-IN
[java] arg=test
[java] arg=D:\source\liyixing\ant\build.xml
[java] arg=to to to
[java] arg=D:\source\liyixing\ant\build.xml;D:\build.xml
[exec]
[exec] D:\source\liyixing\ant>echo off
[exec] JAVA_HOME = java-home
[echo] 运行结束
[echo] 时间:1619
BUILD SUCCESSFUL
Total time: 1 second
上面是自己设置的环境值,可以访问系统环境
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<property environment="env" />
<property name="JAVA_HOME" value="${env.JAVA_HOME}" />
<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>
<target name="clean">
<delete file="${result}" />
</target>
<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>
<exec executable="test.bat">
<env key="JAVA_HOME" value="${JAVA_HOME}" />
</exec>
<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
</project>
这里的
<property environment="env" />
将系统环境变量定义在env中。
通过env.xxx访问,结果
D:\source\liyixing\ant>d:\soft\liyixing\ant\apache-ant-1.8.2\bin\ant
Buildfile: D:\source\liyixing\ant\build.xml
run:
[echo] 开始运行
[java] arg=-IN
[java] arg=test
[java] arg=D:\source\liyixing\ant\build.xml
[java] arg=to to to
[java] arg=D:\source\liyixing\ant\build.xml;D:\build.xml
[exec]
[exec] D:\source\liyixing\ant>echo off
[exec] JAVA_HOME = C:\Program Files\Java\jdk1.6.0_22
[echo] 运行结束
[echo] 时间:1624
BUILD SUCCESSFUL
Total time: 1 second
filelist DataType
org.apache.tools.ant.types.FileList,文件无需真正存在。
属性:
dir用于计算绝对文件名的路径
files用逗号分隔的文件名列表
refid对某处定义的filelist的应用。
在没有指定refid的情况下,dir和files是必须的。而指定了的话,files和dir就不能使用。
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<target name="run">
<dependset>
<srcfilelist refid="needFiles" />
<srcfilelist refid="moreFiles" />
<targetfilelist dir="." files="d.txt" />
</dependset>
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
</project>
<targetfilelist dir="." files="d.txt" />这里也可以使用refid。只是因为一个文件,使用files属性更方便。
fileset DataType
文件必须存在。fileset还可能指定为目标级构建文件元素(<project>的子元素)并由其id引用(refid)。
属性
dir,必须,fileset的基目录
casesensitive如果是false,那么文件不区分大小写。默认值是true
defaultexcludes是否使用默认的排除模式。默认是true。默认的排除模式会排除文件:**/*~ **/#*# **/%*% **/CVS **/CVS/** **/.cvsignore **/SCCS **/SCCS/** **/vssver.scc
excludes用逗号分隔,需要排除的文件模式劣币哦啊。
excludesfile每行包括一个排除模式的文件的文件名。
includes用逗号分隔的需要包含的文件模式列表
includesfile每行包括一个包含模式的文件的文件名
另外它也可以包含
0-n个<patternset>元素,patternset元素可以包含。<exclude>元素,<include>元素,<excludesfile>元素,<includesfile>元素。或者直接写<exclude>元素,<include>元素,<excludesfile>元素,<includesfile>元素
<fileset id="source1" dir="src" include="**/*.java" excludes="**/test/**/*.java">
</fileset>
<fileset id="source2" dir="src">
<include name="**/*.java" />
<exclude name="*/test/**/*.java" />
</fileset>
fileset id="source3" dir="src">
<patternset>
<include name="**/*.java" />
<exclude name="*/test/**/*.java" />
</patternset>
</fileset>
<patternset id="patternset.source1">
<include name="**/*.java" />
<exclude name="*/test/**/*.java" />
</patternset>
fileset id="source4" dir="src">
<patternset refid="patternset.source1" />
</fileset>
包含和排除的模式语法
*与0个或多个字符匹配。*.java可以与任何以java结尾的文件
?与1个字符相匹配。File?.Java,可以和FileA.java匹配,但是不和FileTest.java,因为?字匹配一个字符。
**与0个或多个目录相匹配(包括子目录)。/xml/**与/xml/下的所有目录和文件都匹配。
匹配模式可以结合
com/oreilly/**/*Test.java可以匹配
com/oreilly/antbook/AccountTest.java
com/oreilly/BTest.java
com/oreilly/service/CTest.java
patternset DataType
fileset是对文件的分组。而patternset是对模式的分组。fileset依赖于选择文件的模式。它可以作为目标级(project子元素)构建文件元素出现。也可以作为fileset的一个嵌套元素出现。
属性
includes,excludes,includesfile,excludesfile和fileset的属性类似。
另外它还可以包含
include元素
exclude元素
他们都支持如下属性
name 匹配的模式
if特性名。只在设置了该特性时,ant才使用此模式。
unless特性名。只在未设置该特性时ant才使用此模式。
包含includesfile和excludesfile
他们支持属性
name类似,每行一个模式
if类似
unless类似
实例
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir="." includes="1.txt, 2.txt"/>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
</project>
会把1.txt和2.txt拷贝到copy目录
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<patternset id="copyFiles">
<include name="**/*.txt" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
</project>
拷贝所有txt文件到copy目录
有选择的
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="**/*t.txt" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
</project>
在没有定义属性includetests的时候可以看到结果没有把*t.java拷贝过去。
而当我定义了includetests,
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="**/*t.txt" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
</project>
会把*t.java也拷贝过去了。
filterset DataType
ant1.4支持。定义一组过滤器。这些过滤器由filter任务实现。将在文件移动或者复制的时候完成文件中的文本替换。
由filterset元素表示。可以作为copy或者move任务中的内容出现或者作为目标级构建文件出现(作为project元素的子元素出现)
属性
beginoken,对于嵌套过滤器所搜索的记号。这是标识其开始的字符串。默认@
endtoken,对于嵌套过滤器所搜索的记号。这是标识其结束的字符串。默认@
id,此过滤器的唯一标识符。
refid,对构建文件中某处定义的一个过滤器的引用。
filterset还可以包含以下子元素
0-N个filter
token必须,指定要替换的记号,不包括定界符。如果此过滤器要替换@VERSION@,则将VERSION作为此属性值。
value必须,指定遇到记号时的替换文本。
0-N个<filtersfile>
每个元素指定一个java特性文件,由此可加载另外的过滤器。此文件格式是每一行一个记号,其后面为一个冒号(;)或者等于号(=)。再后面是一个值。
属性
file必须,包含过滤器的特性文件的文件名。
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="build/*.*" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${starttime}" />
<copy todir="build" filtering="true">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
<filterset begintoken="%" endtoken="!">
<filter token="BUILD_DATE" value="${starttime}" />
<filter token="COPYRIGHT" value="李义星" />
</filterset>
</copy>
<echo message="结束" />
<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${endtime}" />
</target>
</project>
<!--
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="**/*t.txt" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
-->
<!--
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<property environment="env" />
<property name="JAVA_HOME" value="${env.JAVA_HOME}" />
<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>
<target name="clean">
<delete file="${result}" />
</target>
<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>
<exec executable="test.bat">
<env key="JAVA_HOME" value="${JAVA_HOME}" />
</exec>
<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
-->
<!--
<target name="prepare">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
</target>
<target name="clean" description="删除build目录">
<delete dir="${build.dir}" />
</target>
<target name="compile" description="编译" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>
<target name="jar" description="打包" depends="prepare">
<echo message="${debug.flag}" />
</target>
<target name="all" description="所有操作,执行顺序是:clean, compile, jar" depends="clean, compile, jar">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>-->
1.txt
%BUILD_DATE!
%COPYRIGHT!
拷贝后
2011-05-14 08:51:32
李义星
上面的copy任务的filtering设置为true,以确保filter开启。
path DataType
它既可以作为一个属性存在,也可以作为一个嵌套的元素存在。用作属性的时候,应该使用分号;或者冒号:分隔多个路径。这个路径会被代替为平台所用的路径分隔符,windows是分号;,而linux则是冒号:,这个是ant自动判断的。
属性
location 表示一个文件或者目录。ant会自动生成为绝对路径
path一个文件的路径名列表,使用;或者:分隔
refid引用当前构建文件中某处定义的path
如果指定了refid属性,location和path就不能使用。切其内部就不能出现嵌套元素。而不使用refid,location和path需要选择一个。
它还支持嵌套元素:
pathelement
包含一个或多个的path中的文件。每个pathelement也有location和path属性。
fileset元素
提供将文件包含在path中的另一种方法。
<path>
<pathelement location="xxx.jar" />
<pathelement path="aaa.jar" />
</path>
<path>
<pathelement location="xxx.jar" />
<pathelement path="aaa.jar;bbb.jar;ccc.jar" />
</path>
还支持一种简写方法
<classpath>
<pathelement path="${builddir}\aaa.jar;bbb.jar;ccc.jar" />
</classpath>
<classpath path="${builddir}\aaa.jar;bbb.jar;ccc.jar">
</classpath>
嵌套fileset的情况
<classpath>
<pathelement path="${builddir}\aaa.jar;bbb.jar;ccc.jar" />
<fileset dir="${lib}" includes="**\*.jar" />
</classpath>
mapper DataType
ant 1.3
定义了一组源文件和一组目标文件如何关联。
属性:
classname,实现mapper类的类名。可以用来定义自己的mapper实现。
classpath,查找定制的mapper实现的类路径
classpathref,对某处定义的一个类路径的引用。
from,此属性含义取决与mapper的实现。
refid,对另一个mapper的引用。如果指定了refid,则不能出现其他属性。
to,取决与mapper的实现
type,可选值为identity,flatten,glob,merge,或者regexp中的一个。要使用的内置mapper的类型。
type和classname必须选择一个。其他的像form和to由mapper的实现决定。
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<tstamp>
<format property="now" pattern="yyyy-MM-dd-hh-mm-ss" />
</tstamp>
<mapper id="backupMapper" type="glob" from="*.java" to="*-${now}.java.bak" />
<target name="clean">
<delete dir="backup" />
</target>
<target name="prepare">
<mkdir dir="bak" />
</target>
<target name="run" depends="clean,prepare">
<echo message="开始" />
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${starttime}" />
<copy todir="backup" filtering="true">
<fileset dir="src" includes="**/*.java" />
<mapper refid="backupMapper" />
</copy>
<echo message="结束" />
<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${endtime}" />
</target>
</project>
我在src目录下面有一个Test.java
运行后的结果是在backup目录有一个新的文件生成
Test-2011-05-14-09-26-04.java.bak
当文件被删除或者复制的时候,会被按照mapper指定的模式命名。
这里使用的是glob mapper
identity mapper
将源文件与目标文件匹配。这是copy任务所使用的默认mapper。
这个mapper复制的同时,会把目录结构也复制进去。
flatten mapper
从文件名中删除所有的路径信息。
像glob,identity mapper都会把目录结构也复制进去。而flatten则不会
glob mapper基于简单的通配符模式。to和from都最多可以出现一个*符号。当源文件名与from模式匹配时,即生成目标文件。to的*会被from的*所匹配的字符替换。
merge mapper
这个不知。
regexp mapper
类似glob的mapper。支持正则。正则的语法由底层使用的正则表达式库决定。
ant包含了实现一下正则库的类
jse
jakarta-regexp
jakarta-ORO
特性有两个特点,它们是不可变的,而且不论在哪里定义,总是属于全局作用域。
不可变说明一旦ant首次处理了键值对,那么这个特性值就不能变了。特性有优先顺序。在ant命令行通过参数传递进去的级别高于其他位置定义的特性。
随后,ant会根据其首次发现的特性声明,来作为第一级的特性。
如
<?xml version="1.0" encoding="utf-8"?>
<project name="测试" default="all" basedir=".">
<property name="one" value="${two}:one" />
<property name="two" value="two" />
<target name="all" description="所有操作,执行顺序是:clean, compile, jar">
<echo message="one=${one}" />
<echo message="${two}" />
</target>
</project>
运行结果:
D:\source\liyixing\ant>d:\soft\liyixing\ant\apache-ant-1.8.2\bin\ant
Buildfile: D:\source\liyixing\ant\build.xml
all:
[echo] one=${two}:one
[echo] two
BUILD SUCCESSFUL
Total time: 0 seconds
这里可以看到one的结果是${two}:one,而不是two:noe
这里有两个原因
因为ant的有加载顺序要确定特性的。它首先处理的是one,而one的时候two还不存在,ant对不存在的变量应用会输出${propertyname}。
DataType
argument,对于由一个ant构建文件调用的程序,向其传递参数
environment,对于一个ant构件文件调用的外部命令或程序,向其传递环境变量。
filelist,定义一个文件的命名列表,这些文件无需存在。
fileset,定义一个文件的命名列表,这些文件必须存在。
patternset(模式),将一组模式分组在一起。
filterset,将一组过滤器分组在一起。
path以某种在不同操作系统间可以移植的方式指定路径。
mapper定义一组输入文件和一组输出文件间的复杂关系。
ant的DataType实现在org.apache.tools.ant.types包中。由org.apache.tools.ant.types.DataType基类派生。EnumeratedAttribute和Commandline和Environment和Reference也被看做是DataType。但他们不是DataType派生。
org.apache.tools.ant.ProjectComponent提供了日志功能,还能访问Project对象。ProjectComponent是各个ant任务的基类。
属性类型:
boolean 完成不区分大小写的字符串比较,将on,true,yes转换成true。其他转换成false
Enum org.apache.tools.ant.types.EnumeratedAttribute实现,用于允许有固定的字符串值集合的情况
File java.io.File指定某个文件或目录的名字。除非另外做说明,否则文件和目录名都相对于项目基目录。
int,long java.lang.Integer和java.lang.Long包装类会处理
Path org.apahce.tools.ant.types.Path常用于classpath和sourcepath属性。用;或者:分隔路径列表。
Reference org.apache.tools.ant.types.Reference 常用于refid属性。对某个类型的id的应用。
String java.lang.String这是ant使用最多的。需要符合xml规范。如>符号需要写成$gt;
argument
<arg>元素由org.apache.tools.ant.types.Commandline.Argument类实现这个DataType
apply exec java任务都接受arg子元素。可以为他们传递参数。
具有的属性
file 作为一个参数的文件名。在构件文件中,此文件名相对于当前的工作目录。在传递过去前,会被转换成一个绝对路径。
line用空格分隔的多个参数的列表
path路径
value一个命令行参数。如果参数中有空格,需要使用这个属性传递。使用line,空格会被解析成多个参数。
每一个arg元素中,上面的属性有且只有一个。
测试
test类
/**
* test
* */
package test;
public class Test{
public static void main(String[] args) {
for(String arg : args) {
System.out.println("arg=" + arg);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<project name="arg元素测试" default="run" basedir=".">
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>
<target name="clean">
<delete file="${result}" />
</target>
<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>
<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
</project>
运行结果
D:\source\liyixing\ant>d:\soft\liyixing\ant\apache-ant-1.8.2\bin\ant
Buildfile: D:\source\liyixing\ant\build.xml
run:
[echo] 开始运行
[java] arg=-IN
[java] arg=test
[java] arg=D:\source\liyixing\ant\build.xml
[java] arg=to to to
[java] arg=D:\source\liyixing\ant\build.xml;D:\build.xml
[echo] 运行结束
[echo] 时间:1605
BUILD SUCCESSFUL
Total time: 0 seconds
可以看出来
属性
line="-IN test"被解析成了两个参数
file="build.xml"传递进去的结果是D:\source\liyixing\ant\build.xml,绝对路径。
value="to to to"被当做一个参数传递
path="build.xml;/build.xml"被解析成了D:\source\liyixing\ant\build.xml;D:\build.xml,在unix中会被解析成
/source/liyixing/ant/(这部分是当前目录)build.xml:/build.xml
environment DataType
对于系统命令的
apply和exec任务,需要0或多个env元素。这个元素指定哪些系统环境要传递给正在执行的系统命令。由 org.apache.tools.ant.types.Environment.Variable类实现。
属性:
file,文件,会被转换成绝对路径
key,必须,环境变量名
path,ant会把它转换成一个本地约定。
value,环境变量的一个直接量值
file,path,value只取其一
测试
编写test.bat
echo off
echo JAVA_HOME = %JAVA_HOME%
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<property name="JAVA_HOME" value="java-home" />
<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>
<target name="clean">
<delete file="${result}" />
</target>
<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>
<exec executable="test.bat">
<env key="JAVA_HOME" value="${JAVA_HOME}" />
</exec>
<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
</project>
<!--
<target name="prepare">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
</target>
<target name="clean" description="删除build目录">
<delete dir="${build.dir}" />
</target>
<target name="compile" description="编译" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>
<target name="jar" description="打包" depends="prepare">
<echo message="${debug.flag}" />
</target>
<target name="all" description="所有操作,执行顺序是:clean, compile, jar" depends="clean, compile, jar">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>-->
运行结果
D:\source\liyixing\ant>d:\soft\liyixing\ant\apache-ant-1.8.2\bin\ant
Buildfile: D:\source\liyixing\ant\build.xml
run:
[echo] 开始运行
[java] arg=-IN
[java] arg=test
[java] arg=D:\source\liyixing\ant\build.xml
[java] arg=to to to
[java] arg=D:\source\liyixing\ant\build.xml;D:\build.xml
[exec]
[exec] D:\source\liyixing\ant>echo off
[exec] JAVA_HOME = java-home
[echo] 运行结束
[echo] 时间:1619
BUILD SUCCESSFUL
Total time: 1 second
上面是自己设置的环境值,可以访问系统环境
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<property environment="env" />
<property name="JAVA_HOME" value="${env.JAVA_HOME}" />
<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>
<target name="clean">
<delete file="${result}" />
</target>
<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>
<exec executable="test.bat">
<env key="JAVA_HOME" value="${JAVA_HOME}" />
</exec>
<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
</project>
这里的
<property environment="env" />
将系统环境变量定义在env中。
通过env.xxx访问,结果
D:\source\liyixing\ant>d:\soft\liyixing\ant\apache-ant-1.8.2\bin\ant
Buildfile: D:\source\liyixing\ant\build.xml
run:
[echo] 开始运行
[java] arg=-IN
[java] arg=test
[java] arg=D:\source\liyixing\ant\build.xml
[java] arg=to to to
[java] arg=D:\source\liyixing\ant\build.xml;D:\build.xml
[exec]
[exec] D:\source\liyixing\ant>echo off
[exec] JAVA_HOME = C:\Program Files\Java\jdk1.6.0_22
[echo] 运行结束
[echo] 时间:1624
BUILD SUCCESSFUL
Total time: 1 second
filelist DataType
org.apache.tools.ant.types.FileList,文件无需真正存在。
属性:
dir用于计算绝对文件名的路径
files用逗号分隔的文件名列表
refid对某处定义的filelist的应用。
在没有指定refid的情况下,dir和files是必须的。而指定了的话,files和dir就不能使用。
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<target name="run">
<dependset>
<srcfilelist refid="needFiles" />
<srcfilelist refid="moreFiles" />
<targetfilelist dir="." files="d.txt" />
</dependset>
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
</project>
<targetfilelist dir="." files="d.txt" />这里也可以使用refid。只是因为一个文件,使用files属性更方便。
fileset DataType
文件必须存在。fileset还可能指定为目标级构建文件元素(<project>的子元素)并由其id引用(refid)。
属性
dir,必须,fileset的基目录
casesensitive如果是false,那么文件不区分大小写。默认值是true
defaultexcludes是否使用默认的排除模式。默认是true。默认的排除模式会排除文件:**/*~ **/#*# **/%*% **/CVS **/CVS/** **/.cvsignore **/SCCS **/SCCS/** **/vssver.scc
excludes用逗号分隔,需要排除的文件模式劣币哦啊。
excludesfile每行包括一个排除模式的文件的文件名。
includes用逗号分隔的需要包含的文件模式列表
includesfile每行包括一个包含模式的文件的文件名
另外它也可以包含
0-n个<patternset>元素,patternset元素可以包含。<exclude>元素,<include>元素,<excludesfile>元素,<includesfile>元素。或者直接写<exclude>元素,<include>元素,<excludesfile>元素,<includesfile>元素
<fileset id="source1" dir="src" include="**/*.java" excludes="**/test/**/*.java">
</fileset>
<fileset id="source2" dir="src">
<include name="**/*.java" />
<exclude name="*/test/**/*.java" />
</fileset>
fileset id="source3" dir="src">
<patternset>
<include name="**/*.java" />
<exclude name="*/test/**/*.java" />
</patternset>
</fileset>
<patternset id="patternset.source1">
<include name="**/*.java" />
<exclude name="*/test/**/*.java" />
</patternset>
fileset id="source4" dir="src">
<patternset refid="patternset.source1" />
</fileset>
包含和排除的模式语法
*与0个或多个字符匹配。*.java可以与任何以java结尾的文件
?与1个字符相匹配。File?.Java,可以和FileA.java匹配,但是不和FileTest.java,因为?字匹配一个字符。
**与0个或多个目录相匹配(包括子目录)。/xml/**与/xml/下的所有目录和文件都匹配。
匹配模式可以结合
com/oreilly/**/*Test.java可以匹配
com/oreilly/antbook/AccountTest.java
com/oreilly/BTest.java
com/oreilly/service/CTest.java
patternset DataType
fileset是对文件的分组。而patternset是对模式的分组。fileset依赖于选择文件的模式。它可以作为目标级(project子元素)构建文件元素出现。也可以作为fileset的一个嵌套元素出现。
属性
includes,excludes,includesfile,excludesfile和fileset的属性类似。
另外它还可以包含
include元素
exclude元素
他们都支持如下属性
name 匹配的模式
if特性名。只在设置了该特性时,ant才使用此模式。
unless特性名。只在未设置该特性时ant才使用此模式。
包含includesfile和excludesfile
他们支持属性
name类似,每行一个模式
if类似
unless类似
实例
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir="." includes="1.txt, 2.txt"/>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
</project>
会把1.txt和2.txt拷贝到copy目录
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<patternset id="copyFiles">
<include name="**/*.txt" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
</project>
拷贝所有txt文件到copy目录
有选择的
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="**/*t.txt" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
</project>
在没有定义属性includetests的时候可以看到结果没有把*t.java拷贝过去。
而当我定义了includetests,
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="**/*t.txt" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
</project>
会把*t.java也拷贝过去了。
filterset DataType
ant1.4支持。定义一组过滤器。这些过滤器由filter任务实现。将在文件移动或者复制的时候完成文件中的文本替换。
由filterset元素表示。可以作为copy或者move任务中的内容出现或者作为目标级构建文件出现(作为project元素的子元素出现)
属性
beginoken,对于嵌套过滤器所搜索的记号。这是标识其开始的字符串。默认@
endtoken,对于嵌套过滤器所搜索的记号。这是标识其结束的字符串。默认@
id,此过滤器的唯一标识符。
refid,对构建文件中某处定义的一个过滤器的引用。
filterset还可以包含以下子元素
0-N个filter
token必须,指定要替换的记号,不包括定界符。如果此过滤器要替换@VERSION@,则将VERSION作为此属性值。
value必须,指定遇到记号时的替换文本。
0-N个<filtersfile>
每个元素指定一个java特性文件,由此可加载另外的过滤器。此文件格式是每一行一个记号,其后面为一个冒号(;)或者等于号(=)。再后面是一个值。
属性
file必须,包含过滤器的特性文件的文件名。
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="build/*.*" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${starttime}" />
<copy todir="build" filtering="true">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
<filterset begintoken="%" endtoken="!">
<filter token="BUILD_DATE" value="${starttime}" />
<filter token="COPYRIGHT" value="李义星" />
</filterset>
</copy>
<echo message="结束" />
<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${endtime}" />
</target>
</project>
<!--
<filelist id="needFiles" dir="." files="1.txt, 2.txt, 3.txt" />
<filelist id="moreFiles" dir="." files="4.txt" />
<patternset id="copyFiles">
<include name="**/*.txt" />
<exclude name="**/*t.txt" unless="includetests" />
</patternset>
<target name="run">
<echo message="开始" />
<copy todir="copy">
<fileset dir=".">
<patternset refid="copyFiles" />
</fileset>
</copy>
<tstamp />
<echo message="时间:${TSTAMP}" />
<echo message="结束" />
</target>
-->
<!--
<property name="run.dir" value="bin" />
<property name="result" value="Family Tree.html" />
<property environment="env" />
<property name="JAVA_HOME" value="${env.JAVA_HOME}" />
<path id="project.class.path">
<pathelement location="${run.dir}" />
</path>
<target name="clean">
<delete file="${result}" />
</target>
<target name="run" description="运行">
<echo message="开始运行" />
<java fork="true" classname="test.Test" failonerror="true">
<arg line="-IN test" />
<arg file="build.xml" />
<arg value="to to to" />
<arg path="build.xml;/build.xml" />
<classpath refid="project.class.path" />
</java>
<exec executable="test.bat">
<env key="JAVA_HOME" value="${JAVA_HOME}" />
</exec>
<echo message="运行结束" />
<tstamp />
<echo message="时间:${TSTAMP}" />
</target>
-->
<!--
<target name="prepare">
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
</target>
<target name="clean" description="删除build目录">
<delete dir="${build.dir}" />
</target>
<target name="compile" description="编译" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>
<target name="jar" description="打包" depends="prepare">
<echo message="${debug.flag}" />
</target>
<target name="all" description="所有操作,执行顺序是:clean, compile, jar" depends="clean, compile, jar">
<javac srcdir="${src.dir}" destdir="${build.classes}" />
</target>-->
1.txt
%BUILD_DATE!
%COPYRIGHT!
拷贝后
2011-05-14 08:51:32
李义星
上面的copy任务的filtering设置为true,以确保filter开启。
path DataType
它既可以作为一个属性存在,也可以作为一个嵌套的元素存在。用作属性的时候,应该使用分号;或者冒号:分隔多个路径。这个路径会被代替为平台所用的路径分隔符,windows是分号;,而linux则是冒号:,这个是ant自动判断的。
属性
location 表示一个文件或者目录。ant会自动生成为绝对路径
path一个文件的路径名列表,使用;或者:分隔
refid引用当前构建文件中某处定义的path
如果指定了refid属性,location和path就不能使用。切其内部就不能出现嵌套元素。而不使用refid,location和path需要选择一个。
它还支持嵌套元素:
pathelement
包含一个或多个的path中的文件。每个pathelement也有location和path属性。
fileset元素
提供将文件包含在path中的另一种方法。
<path>
<pathelement location="xxx.jar" />
<pathelement path="aaa.jar" />
</path>
<path>
<pathelement location="xxx.jar" />
<pathelement path="aaa.jar;bbb.jar;ccc.jar" />
</path>
还支持一种简写方法
<classpath>
<pathelement path="${builddir}\aaa.jar;bbb.jar;ccc.jar" />
</classpath>
<classpath path="${builddir}\aaa.jar;bbb.jar;ccc.jar">
</classpath>
嵌套fileset的情况
<classpath>
<pathelement path="${builddir}\aaa.jar;bbb.jar;ccc.jar" />
<fileset dir="${lib}" includes="**\*.jar" />
</classpath>
mapper DataType
ant 1.3
定义了一组源文件和一组目标文件如何关联。
属性:
classname,实现mapper类的类名。可以用来定义自己的mapper实现。
classpath,查找定制的mapper实现的类路径
classpathref,对某处定义的一个类路径的引用。
from,此属性含义取决与mapper的实现。
refid,对另一个mapper的引用。如果指定了refid,则不能出现其他属性。
to,取决与mapper的实现
type,可选值为identity,flatten,glob,merge,或者regexp中的一个。要使用的内置mapper的类型。
type和classname必须选择一个。其他的像form和to由mapper的实现决定。
<?xml version="1.0" encoding="utf-8"?>
<project name="DataType 测试" default="run" basedir=".">
<tstamp>
<format property="now" pattern="yyyy-MM-dd-hh-mm-ss" />
</tstamp>
<mapper id="backupMapper" type="glob" from="*.java" to="*-${now}.java.bak" />
<target name="clean">
<delete dir="backup" />
</target>
<target name="prepare">
<mkdir dir="bak" />
</target>
<target name="run" depends="clean,prepare">
<echo message="开始" />
<tstamp>
<format property="starttime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${starttime}" />
<copy todir="backup" filtering="true">
<fileset dir="src" includes="**/*.java" />
<mapper refid="backupMapper" />
</copy>
<echo message="结束" />
<tstamp>
<format property="endtime" pattern="yyyy-MM-dd hh:mm:ss" />
</tstamp>
<echo message="时间:${endtime}" />
</target>
</project>
我在src目录下面有一个Test.java
运行后的结果是在backup目录有一个新的文件生成
Test-2011-05-14-09-26-04.java.bak
当文件被删除或者复制的时候,会被按照mapper指定的模式命名。
这里使用的是glob mapper
identity mapper
将源文件与目标文件匹配。这是copy任务所使用的默认mapper。
这个mapper复制的同时,会把目录结构也复制进去。
flatten mapper
从文件名中删除所有的路径信息。
像glob,identity mapper都会把目录结构也复制进去。而flatten则不会
glob mapper基于简单的通配符模式。to和from都最多可以出现一个*符号。当源文件名与from模式匹配时,即生成目标文件。to的*会被from的*所匹配的字符替换。
merge mapper
这个不知。
regexp mapper
类似glob的mapper。支持正则。正则的语法由底层使用的正则表达式库决定。
ant包含了实现一下正则库的类
jse
jakarta-regexp
jakarta-ORO
发表评论
-
运行swing等可视化程序
2014-03-26 14:55 879Ant中调用的时候,总是一闪而过。 需要添加 <java ... -
ant path匹配
2013-07-22 09:40 2180spring和ant path实现相关的主要类有两个 org. ... -
自定义任务
2012-11-21 22:33 1169<!-- 代码覆盖率任务定义,classpathref直 ... -
copy的时候,保持原有的目录结构
2012-11-21 17:31 1829flatten:用于指定是否需要复制目录,如果为true代表把 ... -
给ant指定内存
2012-02-14 12:40 1233Windows操作系统,在运行ant的bat脚本文件: set ... -
DEBUG -- CLOSE BY CLIENT STACK TRACE
2011-10-20 10:28 27648在单元测试测试环境下主要参数两个错误信息: 1.java.la ... -
奇怪的乱码
2011-10-20 00:14 1380通过ant运行build,然后启动测试。测试的时候有log4j ... -
junit - formatter 等等和测试有关的指令
2011-10-18 22:38 1323<formatter> </formatte ... -
文件移动或者复制的时候完成文件中的文本替换。实现antx功能
2011-10-15 11:56 2089filterset DataType ant1.4支持。定义 ... -
cobertura做测试覆盖率 ant的配置
2011-09-25 23:05 7483cobertura原理大致如下: 首先修改我们编译后的clas ... -
关于依赖
2011-05-14 15:05 1153所以指定了排除,但是,并不是说排除的类一定不编译。java编译 ... -
target目标与任务
2011-05-14 15:02 2444运行ant没有带参数的情 ... -
构建的时候的错误
2011-05-14 13:44 2098工程级错误 ant会加载构建文件的所有元素。它将处理除目标(t ... -
安装与部署
2011-05-14 11:03 954下载,请google,baidu 注意不要将ant的jar文 ... -
构件文件
2011-05-13 20:57 834ant默认构建文件build.xml 指定别的构件文件 ant ... -
ant命令帮助
2011-05-13 20:55 729ant的核心文件,build.xml(根据需要可以使用别的xm ...
相关推荐
Jackson Datatype Guava 2.8.0包含以下关键特性: 1. **Guava数据类型的支持**:此模块扩展了Jackson的核心功能,使其能够理解和处理Guava的特殊数据类型,如ImmutableList、ImmutableSet、ImmutableMap以及...
这个特定的版本——2.3.0-beta6,意味着它是Jackson-datatype-jsr310的一个beta测试版本,可能包含了一些新特性或改进,但尚未进行充分的稳定性和兼容性测试。 Jackson库的主要功能包括将Java对象转换为JSON格式...
### [ScriptService] 特性的 Web 服务才能从脚本中...通过以上介绍,我们可以看出,合理使用`[ScriptService]`特性可以极大地简化Web服务与前端脚本之间的交互过程。希望本文能够帮助开发者更好地理解和解决相关问题。
在Silverlight 5中增加了隐式数据重用模板的特性,此特性是根据模板设置DataType类型自动绑定该显示样式,而且隐式模板可重用性高节约了代码量。 隐式数据重用模板的运行原理是这样的:ListBox的ItemsSource属性设置...
"前端面试题之baseJS-datatype.zip"这个压缩包文件聚焦于JavaScript的基础数据类型,这对于我们准备前端面试至关重要。下面,我们将详细探讨JavaScript中的基本数据类型及其相关的知识点。 1. **基本数据类型** ...
本资料【MMS_040315]Double INC and Double DEC of INT datatype.rar】主要探讨的是在AB PLC编程中涉及到的“双倍递增(Double INC)”和“双倍递减(Double DEC)”操作,特别是针对INT数据类型的应用。 在PLC编程...
MySQL5是数据库管理系统的重要版本,它引入了许多新特性以增强其功能和性能。在这个主题中,我们将重点关注"存储过程"这一特性。存储过程是预编译的SQL语句集合,可以视为数据库中的可重用代码模块,对于提高数据库...
dataType: 'json', // 预期的服务器响应类型 success: function(data, status) { // 上传成功后的处理 }, error: function(data, status, e) { // 上传失败后的处理 } }); ``` 5. **跨域上传** 如果...
线性表是一种常见的数据结构,它是由具有相同特性的数据元素组成的有限序列。线性表中的每个元素都有一个前驱元素和后继元素,除了第一个元素没有前驱,最后一个元素没有后继。在本通讯录管理系统中,使用了线性表来...
讨论了Ant的主要特性提供乐观用Ant来管理工程的一些最佳实践;解释了某些Ant问题的解决方法。 本书是目前市面最经典中文Apache Ant书籍,是一本译著。作者当时针对 Ant 1.4.2 进行的编写。现在(2012-3-10) Ant ...
这些定义通常放置在一个名为`datatype.h`的文件中。 #### 五、标识符命名 - **基本原则**: 命名应具有明确的意义,便于理解和记忆。避免使用过于简短的命名。 - **宏和常量**: 使用全大写字母,单词间使用下划线...
下面我们将深入探讨Validform的核心特性、功能和使用方法。 首先,Validform提供了多种内置的验证规则,如非空检查、长度限制、邮箱格式验证、手机号码验证等。这些规则可以满足大多数常见的表单验证需求。例如,你...
"postgres_contrib_datatype_converter" 是一个与 PostgreSQL 数据库相关的项目,它主要关注的是数据类型转换。在 PostgreSQL 中,`contrib` 模块是一系列可选的扩展,它们提供了数据库系统核心功能之外的额外特性和...
概述这是支持 Java 8 功能所需的Jackson模块的多...Jackson 2.x与 Jackson 2.x 一起使用时,Java 8 支持通过 3 个独立模块提供参数名称支持检测构造函数和工厂方法(“创建者”)参数,而无需使用@JsonProperty注释提供...
2. **动易2005版功能简介.doc**:这份文档应该列出了PowerEasy2005的主要特性与功能,包括但不限于:用户管理、内容发布、论坛模块、在线交流工具、教育资源库、作业管理系统、成绩查询等。这些功能都是为了实现“家...
1. **DataType.h**:这个头文件通常定义了SDK中使用的各种数据类型和结构体。它可能包括错误代码枚举、设备状态、网络协议相关的数据结构等。开发者通过引用此文件,可以了解和使用SDK提供的各种数据格式,以便正确...
在实际使用中,如果你的Java应用中涉及到了`java.time`包下的日期时间类型,并且需要与JSON进行交互,那么添加Jackson-datatype-threetenbp模块就显得尤为重要。通过简单的配置,可以确保在序列化时,`java.time`...
本文将深入解析几个关键的顺序表习题及其解答,帮助初学者更好地理解顺序表的特性和操作。 ### 一、顺序表的概念与特点 首先,明确算法与程序的区别。算法是一种解决问题的策略或方法,通常以数学公式或伪代码形式...