ant的名称是another neat tool的首字母的缩写。最初的创始人James Duncan Davidson。
获取ant,http://ant.apache.org/。-bin.zip包。下载下来后配置下环境变量,ANT_HOME和path就可以了。配置环境变量的时候,注意最后一个不能有“;”
使用ant,可以编写单个生成文件,这个生成文件在任何Java平台上都一致的操作(因为ant本身也是使用Java语言来实现的),这就是Ant最大的优势。
ant的属性
1,ant中的属性一经设置,就不可更改。(除了使用java的自定义ant文件中setProperty修改)
2,利用这个特性,可以使用 -Dmetal=beryllium,注意-D没有空格。
3,ant中有许多预定义的属性。首先,Java环境设置用于运行Ant的所有系统属性,均可以作为Ant属性使用。比如${user.home}。除了这些,Ant还定义了它自己的一小组属性,包括${basedir}等。
属性经常用于引用文件系统上的文件或目录,但是对于使用不同的路径分隔符(例如,/与\)的平台来说,这样可能在跨越不同平台时导致问题。Ant的location属性专门设计用于以平台无关的方式包含文件系统路径。可以像下面这样使用location来代替value:
<property name="database-file" location="archive/databases/${metal}.db" />
用于location属性的路径分割字符将被转化为当前平台的正确格式;而且由于文件名是相对的,它被认为是相对于项目的基目录。同样可以写成下面这样:
<property name="database-file" location="archive\databases\${metal}.db" />
这个标签的两个版本都会在不同的平台具有相同的行为。如果可移植性是必须的,唯一要避免的内容就是文件名中的Dos风格的驱动器号。在可能的地方使用相对路径名称而不是绝对路径名称,这样还会更加灵活。
Ant的主要目标是生成Java应用程序,它能够内在地,出色的支持调用javac编译器以及其他java相关任务就毫不奇怪了。
像Ant一样,javac编译器本身也是java语言实现的。这对Ant中的javac任务的使用来说非常有利,因为通常调用Ant运行所在的Java虚拟机(JVM)中的编译器类。在每次需要编译java代码时,其他生成工具通常需要运行一个新的javac进程,从而需要一个新的JVM实例。而Ant不需要
如果想要单独地调用编译器----例如当你希望指定编译器的某些内存选项,或者需要使用一个不同级别的编译器的,只需要将javac的fork属性设置为true
<javac srcdir="src" fork="true" />
如果想要指定一个不同的javac可执行文件,并向它传递一个最大内存设置,可以像下面这样做:
<javac srcdir="src" fork="true" executable="d:\sdk\bin\javac" memoryMaximumSize="128m"/>
使用ant的时候有的时候在进行编译时说找不到javac,可能是因为机器中有多套jre的问题。手动指定jdk的目录可以解决问题。
jdk和jre的区别:
JDK就是Java Development Kit
JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。
1、为什么Sun要让JDK安装两套相同的JRE?这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在 \lib\tools.jar 里。从下面例子可以看出,先将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 这个意思是说,你输入javac.exe与输入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一样的,会得到相同的结果。从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。而且可以发现\lib目录下的程序都很小,不大于2 9K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:\Program Files\Java目录下的那套JRE就是用来运行一般Java程序用的。
更多的见:http://www.cnitblog.com/asfman/articles/30277.html
在编译后,类文件通常被打包到一个Jar文件中。每个Jar文件都包含一个清单文件,指定该Jar文件的属性。
最简单的例子
<jar destfile="${basedir}/package.jar" basedir="${targetdir}"/>
这里将把${targetdir}目录的所有文件添加到其中(任意类型,而不只是类文件)。如果不指定清单文件,ant将提供一个级别的清单文件。
manifest属性允许指定一个用作该JAR文件的清单的文件。如果只是个引用jar包,可以不指定,如果是可执行的jar,需要main-class。
如果还引用了第三方的jar包,也需要说明。
<jar basedir="${dest.dir}" destfile="${jar.file}">
<manifest>
<attribute name="Main-Class" value="${main.class}" />
<attribute name="Class-Path" value="" />
</manifest>
<zipfileset src="lib/ant-launcher.jar" excludes="META-INF/*" />
<zipfileset src="lib/ant.jar" excludes="META-INF/*" />
</jar>
创建和解压缩zip及tar文件,和创建jar文件类似。
<zip destfile="output.zip" basedir="output" />
相同的语法也可用于创建tar文件。还可以使用gzip和bzip任务来压缩文件。例如:
<gzip src="output.tar" zipfile="output.tar.gz" />
解压缩和提取文件同样的简单:
<unzip src="output.tar.gz" dest="extractDir" />
还可以包括overwrite属性来控制覆盖行为。默认为true。相关的任务名称是untar,unjar,gunzip和bunzip2。
替换文件中的标记
replace任务,它执行文件中的查找和替换操作。token属性指定要查找的字符串,value属性指定一个新的字符串,查找到的标记字符串的所有实例都被替换为这个新的字符串。
<replace file="input.txt" token="old" value="new" />
ant中的条件判断
basic elements: istrue isfalse not and or xor available isset equals filesmatch
<project name="testCondition">
<target name="test">
<condition property="scondition">
<istrue value="true"/>
</condition>
<antcall target="isTrue">
</antcall>
<antcall target="isFalse">
</antcall>
</target>
<target name="isTrue" if="scondition">
<echo>is ture</echo>
</target>
<target name="isFalse" unless="scondition">
<echo>is false</echo>
</target>
</project>
剩下的:
- <condition property="scondition">
- <not>
- <istrue value="true"/>
- </not>
- </condition>
- <condition property="scondition">
- <and>
- <istrue value="true"/>
- <istrue value="false"/>
- </and>
- </condition>