ant实践入门
关键字: ant
问题的提出:
Ant(蚂蚁是搬东西的):编译,打包,配置,部署。
这些命令如果一个个地写很麻烦,而且不可以重用,能不能把一个动态的过程描述成一个静态的步骤。
于是,我们想到用一个批处理命令文件,但是如果用.sh和.bat则不可以跨平台,但是如果用ant则可以跨平台。
Ant为了做到跨平台,一个是跨操作系统,另一个是跨IDE,Ant首先抽象出一个中间语言,这个语言是基于xml的。
然后,用Ant执行器来解析该xml描述的操作,并最终和操作系统的批处理命令对应起来。当然,对于ftp这样的外部命令,
可以由第三方插件来支持。
Ant是Apache组织负责开发和维护的,Ant的许多第三方插件也是Apache支持的,比如ftp任务。
http://jakarta.apache.org/ant
Ant的基本任务
常用的内置任务:javac java jar war copy delete mkdir move tstamp
1、java应用程序相关的
【编译】
<javac srcdir="myproject/mysrc" destdir="classes" /> 将源代码编译输出的classes类文件输出到哪。
我们能不能只选择具有某些特性的源代码才编译呢?或者编译的时候,我们要依赖于第三方的一些库呢?
<javac srcdir="myproject/mysrc" destdir="classes" excludes/includes="mypackage/**" classpath="mylib.jar"/>
【运行】
<java classname="textMyTest">
<java classname="testMyTest" classpath="tester.jar" fork="yes">
由于build.xml是由ant来执行的,解析ant要用一个jvm;那么运行的程序可在同一个jvm,也可以单独一个jvm。
fork=yes是不同的jvm。
<java classname="testMyTest">
<classpath>
<pathelement path="myproject/classes">
<pathelement location="mylib/lib.jar">
</classpath>
//classpath这个复合节点,很明朗地让我们明白了java中的常见classpath,一种是基于目录的(比如classes目录),另一种是基于.jar文件的。
//分别对应pathelement path="目录" pathelement location=".jar"
</java>
【打包 jar】
<jar jarfile="myjar.jar" basedir="myproject/root" />
<jar jarfile="myjar.jar" basedir="myproject/root" excludes="*.html" update="yes"/>
<jar jarfile="myjar.jar" basedir="myproject/root" compress="false" /> //是否使用压缩形式
【打包 war】
2、操作文件系统
<copy file="myfile.txt" tofile="root/WEB-INF/web.xml" />
<copy file="myfile.txt" tofile="root/WEB-INF/web.xml" overWrite="yes" />
<delete file="myfile.jar" />
<delete dir="myproject/temp" />
3、资源的集合
FileSets和PatternSets
<patternset> 元素定义一个符合条件的资源的集合。(利用正则表达式来进行过滤)
<fileset> 元素定义一个相对于基本目录的资源集合。
<patternset id="javaFiles">
<include name="**/*.java"> (定义所有的java源文件,无论是哪个目录,包括当前目录及其子目录)
</patternset>
<fileset dir ="myproject/src">
<patternset refid="javaFiles"> (用fileset来指定基本目录,然后用patternset来过滤基本目录及其子目录满足条件的文件)
</fileset>
4、应用fileset和patternset
<jar jarfile="mylib.jar">
<fileset dir="myproject/classes" />
<fileset dir="myproject/bin">
//可以从一个或多个fileset中创建jar
</jar>
<delete>
<fileset dir=".">
<patternset refid="classonly" />
</fileset>
</delete>
<copy todir="../app">
<fileset dir="myproject/root">
<patternset>
<exculude name="**/*.java">
</patternset>
</fileset>
</copy>
5、
<ant dir="myproject" /> 则选择缺省的build.xml文件;
<ant dir="myproject" antfile="c:/test/mybuild.xml" /> 专门指定了build文件。
6、实例
<project name="myWebApp" default="deploy" basedir=".">
<property name="webHome" value="c:\beta\weblogic" />
<property name="domain" value="mydomain" />
<target name="compile">
<mkdir dir="classes" /> //编译所有的java代码,当然有时我们可以排除单元测试的
<javac srcdir="src" destdir="classes" />
</target>
<target name="layout" depends="compile"> //编译完后部署到web服务器上去
<mkdir dir="temp/WEB-INF/classes" />
<copy todir="temp/WEB-INF/classes">
<fileset dir="classes"> //使用fileset和patternset来定义资源集合
</copy>
<copy todir="webroot">
<fileset dir="webroot" />
</copy>
</target>
<target name="archive" depends="layout">
<jar jarfile="musite.war" basedir="temp" />
<delete dir="classes" />
<delete dir="temp" />
</target>
</project>