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>