ant是一个早期的项目管理工具,是使用java语言编写的一个工具,它的运行需要一个xml文件,而这个文件,在java项目中我们一般把它命名为build.xml,就像make命令需要的文件我们一般把它命名为MakeFile一样。ant可以用来编译,测试,部署你的java项目,但是我一般用它来打包,所谓打包,就是把项目打成jar包或者war包,其他的倒是很少用,不过,在工作中,ant也就在打包方面才可能使用到。下面的build.xml用于把项目打成jar包:
<?xml version="1.0" encoding="UTF-8"?> <project default="jar" name="ftzmisBatch" basedir="."> <property name="srcdir" location="src"></property> <property name="libdir" location="lib"></property> <property name="build.dir" location="build"></property> <property name="build.classes" location="${build.dir}/classes"></property> <property name="build.dist" location="${build.dir}/dist"></property> <property environment="env"></property> <path id="libpath"> <fileset dir="${libdir}" includes="*.jar"></fileset> </path> <target name="clean"> <delete dir="${build.dir}"/> </target> <target name="init" depends="clean"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.classes}"/> <mkdir dir="${build.dist}"/> </target> <target name="prepare" depends="init"> <copy todir="${build.classes}"> <fileset dir="${srcdir}" > <include name="**/*.xml"/> <include name="**/*.properties"/> </fileset> </copy> </target> <target name="compile" depends="prepare" > <javac srcdir="${srcdir}" destdir="${build.classes}" classpathref="libpath" includeantruntime="false"> </javac> </target> <target name="unzipjars" depends="compile"> <unzip dest="${build.classes}" overwrite="false" > <fileset dir="${libdir}"> <exclude name="spring-beans-3.1.2.RELEASE.jar"/> </fileset> <patternset> <exclude name="META-INF/**/*"/> </patternset> </unzip> <unzip dest="${build.classes}" src="${libdir}/spring-beans-3.1.2.RELEASE.jar" overwrite="false"></unzip> </target> <target name="jar" depends="unzipjars"> <jar destfile="${build.dist}/${ant.project.name}.jar" basedir="${build.classes}"> <manifest> <attribute name="Main-Class" value="com.synesoft.antimoney.batch.FctAccBalCDBatch"/> <attribute name="Build-By" value="${env.USERNAME}"/> <attribute name="Class-Path" value="."/> </manifest> </jar> </target> </project>
使用的时候右击build.xml,run as就可以了,如下图:
释疑:
其实一开始看到这个build.xml文件,也是一头雾水,这是他妹的哪跟哪啊,一点也理不出头绪来,还好,都过来了,我也不能很确切的记得当初的迷茫点在哪里了,在这里,我就找几个还能记得的地方说说吧。
project:default属性用于指定默认执行的目标(target),在eclipse的run as里面你选择”ant build…”也可以指定只运行某个target目标,但是运行a目标,就意味着a目标所以的依赖项都会被依次执行,这点跟maven的生命周期有点像。basedir=”.”,表示下面所有的路径的基准点都是build.xml所在目录。
target的名字name是你自己随便起的,并没有强制你一定要叫compile,init,随便叫,只是易于理解罢了。
前边说了使用ant编写build.xml文件来打包java项目为jar包,并简要介绍了ant是个什么东西,以及编写好build.xml文件之后又该如何运行它。这次教程呢,跟上次也差不了多少,只是本次给出的案例是打包war包的,供参考:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project default="createwar" name="surveypark"> <property name="base.dir" value="${basedir}"></property> <property name="debug" value="on" /> <property name="debug.level" value="lines,vars,source" /> <property environment="envir"></property> <target name="clean"> <echo >${envir.TOMCAT_HOME}</echo> <delete dir="${base.dir}/build"/> </target> <target name="init" depends="clean"> <mkdir dir="${base.dir}/build/dist"/> <mkdir dir="${base.dir}/build/web"/> <mkdir dir="${base.dir}/build/web/WEB-INF/classes"/> </target> <target name="compile" depends="init" > <javac srcdir="src" destdir="${base.dir}/build/web/WEB-INF/classes" debug="${debug}" debuglevel="${debug.level}"> <classpath refid="alljars" /> </javac> </target> <!--执行java类 <target name="execute" depends="compile" > <java classpath="." classname="hello"></java> </target> --> <path id="alljars"> <path refid="libjars"></path> <path refid="tomcatjars"></path> </path> <path id="libjars"> <fileset dir="${base.dir}/web/WEB-INF/lib" includes="*.jar"></fileset> </path> <path id="tomcatjars" description="加入tomcat的jar包,应该动态获取tomcat的路径,不知道怎么做"> <fileset dir="../../Program Files/apache-tomcat-6.0.41/lib" includes="*.jar"></fileset> </path> <target name="prepare" depends="compile"> <copy id="copyweb" todir="${base.dir}/build/web"> <fileset dir="${base.dir}/web"> <exclude name="upload/**"/> <exclude name="WEB-INF/classes/**"/> </fileset> </copy> <copy id="copyconfig" todir="${base.dir}/build/web/WEB-INF/classes"> <fileset dir="${base.dir}/config"> <include name="**.*"/> </fileset> </copy> </target> <target name="createwar" depends="prepare"> <war webxml="${base.dir}/build/web/WEB-INF/web.xml" warfile="${base.dir}/build/dist/surveypark.war"> <classes dir="${base.dir}/build/web/WEB-INF/classes"></classes> <lib dir="${base.dir}/build/web/WEB-INF/lib"></lib> <fileset dir="${base.dir}/build/web"> <exclude name="${base.dir}/build/web/WEB-INF/classes/cn/**"/> <exclude name="${base.dir}/build/web/WEB-INF/classes/org/**"/> <exclude name="${base.dir}/build/web/WEB-INF/lib/**"/> <exclude name="${base.dir}/build/web/WEB-INF/web.xml"/> </fileset> </war> </target> </project>