一.Ant基本使用指南
1 Ant是什么?
Apache Ant 是一个基于 java的生成工具。
生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式)。随着应用程序的生成过程变得更加复杂,确保在每次生成期间都使用精确相同的生成步骤,同时实现尽可能多的自动化,以便及时产生一致的生成版本
2下载、安装Ant
安装Ant
下载.zip文件,解压缩到c:\ant1.3(后面引用为%ANT_HOME%)
2.1在你运行Ant之前需要做一些配置工作。
·将bin目录加入PATH环境变量。
·设定ANT_HOME环境变量,指向你安装Ant的目录。在一些OS上,Ant的脚本可以猜测ANT_HOME(Unix和Windos NT/2000)-但最好不要依赖这一特性。
·可选地,设定JAVA_HOME环境变量(参考下面的高级小节),该变量应该指向你安装JDK的目录。
注意:不要将Ant的ant.jar文件放到JDK/JRE的lib/ext目录下。Ant是个应用程序,而lib/ext目录是为JDK扩展使用的(如JCE,JSSE扩展)。而且通过扩展装入的类会有安全方面的限制。
2.2运行Ant
运行Ant非常简单,当你正确地安装Ant后,只要输入ant就可以了。
没有指定任何参数时,Ant会在当前目录下查询build.xml文件。如果找到了就用该文件作为buildfile。如果你用 -find 选项。Ant就会在上级目录中寻找buildfile,直至到达文件系统的根。要想让Ant使用其他的buildfile,可以用参数 -buildfile file,这里file指定了你想使用的buildfile。
二.linux使用ant自动打包部署svn中的代码案例
1.build.properties配置文件:build.properties
build.version=1.8.0 #ant工作目录 work.space=/home/itqx/workspace svn.user=deployuser svn.pwd=itqxnet svn.url=http://svn.itqx.org/svn/itqx/code #war放置的目录 dist.dir=${work.space}/bulid #编译后文件的位置 build.dir=${work.space}/${ant.project.name}/WebRoot/WEB-INF/classes javaEE.lib=/usr/local/jdk16/lib debuglevel=source,lines target=1.6 source=1.6 #本项目web文件的位置 web.dir=${work.space}/${ant.project.name}/WebRoot lib.dir=${web.dir}/WEB-INF/lib webcore.lib=${work.space}/edc_core/lib tomcat.home=/home/itqx/itqx_Tomcat tomcat.dir=${tomcat.home}/webapps/ROOT core.version=37265 web.version=36677 project.version=37604 svn.version=HEAD
2.build.xml文件:build.xml
<?xml version="1.0" encoding="UTF-8"?> <project basedir="." name="itqx" default="auto"> <!-- all properties are in build.properties --> <property file="build.properties" /> <property file="../build.properties" /> <!--svn本身需要的运行库 --> <path id="svnant.lib"> <pathelement location="${svnjavahl.jar}" /> <pathelement location="${svnant.jar}" /> <pathelement location="${svnClientAdapter.jar}" /> </path> <!--java EE 库 --> <path id="javaEE"> <fileset dir="${javaEE.lib}"> <include name="**/*.jar" /> </fileset> </path> <!--项目的classpath库 --> <path id="project.classpath"> <pathelement location="${build.dir}" /> <fileset dir="${lib.dir}" /> <fileset dir="${webcore.lib}" /> </path> <!--清理项目任务(干掉下载目录,tomcat原来的部署文件) --> <target name="clear"> <echo message="删除旧的war包 ============>${dist.dir}/${ant.project.name}.war" /> <delete file="${dist.dir}/${ant.project.name}.war" /> </target> <!-- load the svn task --> <taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask"/> <!--svn同步任务--> <target name="svn" depends="clear"> <echo message="从SVN下载文件 ============>${work.space}/edc_core" /> <mkdir dir="${work.space}/edc_core"/> <svn username="${svn.user}" password="${svn.pwd}" javahl="false"> <checkout url="${svn.url}/edc_core" revision="${core.version}" destPath="${work.space}/edc_core" /> </svn> <echo message="从SVN下载文件 ============>${work.space}/edc_web" /> <mkdir dir="${work.space}/edc_web"/> <svn username="${svn.user}" password="${svn.pwd}" javahl="false"> <checkout url="${svn.url}/edc_web" revision="${web.version}" destPath="${work.space}/edc_web" /> </svn> <echo message="从SVN下载文件 ============>${work.space}/${ant.project.name}" /> <mkdir dir="${work.space}/${ant.project.name}"/> <svn username="${svn.user}" password="${svn.pwd}" javahl="false"> <checkout url="${svn.url}/${ant.project.name}" revision="${project.version}" destPath="${work.space}/${ant.project.name}" /> </svn> </target> <!--编译--> <target name="compile" depends="svn" description="编译JAVA文件"> <mkdir dir="${build.dir}/" /> <echo message="编译 ==========>edc_core: ${ant.file}" /> <copy includeemptydirs="false" todir="${build.dir}" description="拷贝${work.space}/edc_core的配置相关文件"> <fileset dir="${work.space}/edc_core/src" excludes="**/*.launch, **/*.java, config/*.*,WEB-INF/classes/*.*"/> </copy> <javac includejavaruntime="true" debug="true" debuglevel="${debuglevel}" includeantruntime="on" destdir="${build.dir}" source="${source}" target="${target}" encoding="utf-8"> <src path="${work.space}/edc_core/src" /> <exclude name="test/"/> <classpath> <path refid="project.classpath"></path> <path refid="javaEE"></path> </classpath> <compilerarg value="-Xlint:unchecked"/> </javac> <echo message="编译 ==========>${ant.project.name}: ${ant.file}" /> <copy includeemptydirs="false" todir="${build.dir}" description="拷贝${java.source}的配置相关文件"> <fileset dir="${work.space}/${ant.project.name}/src" excludes="**/*.launch,WEB-INF/classes/*.*"/> </copy> <javac includejavaruntime="true" debug="true" debuglevel="${debuglevel}" includeantruntime="on" destdir="${build.dir}" source="${source}" target="${target}" encoding="utf-8"> <src path="${work.space}/${ant.project.name}/src" /> <exclude name="test/"/> <classpath> <path refid="project.classpath"> </path> <path refid="javaEE"> </path> </classpath> <compilerarg value="-Xlint:unchecked"/> </javac> <echo message="编译成功--------------------" /> </target> <target name="war" depends="compile" description="制作war包"> <echo message="开始生成war包到->${dist.dir}/${ant.project.name}.war--------------------" /> <mkdir dir="${dist.dir}" /> <delete dir="${work.space}/${ant.project.name}/WebContent"></delete> <copy includeemptydirs="false" todir="${work.space}/${ant.project.name}/WebContent"> <fileset dir="${work.space}/edc_web/WebRoot" excludes="**/*.launch, **/*.java"/> </copy> <copy includeemptydirs="false" todir="${work.space}/${ant.project.name}/WebContent" overwrite="yes"> <fileset dir="${work.space}/${ant.project.name}/WebRoot" excludes="**/*.launch, **/*.java"/> </copy> <echo message="copy config files"/> <copy overwrite="true" file="${work.space}/${ant.project.name}/src/config/config.properties_product" tofile="${work.space}/${ant.project.name}/WebContent/WEB-INF/classes/config.properties"/> <copy overwrite="true" file="${work.space}/${ant.project.name}/src/config/AppConfig.properties_product" tofile="${work.space}/${ant.project.name}/WebContent/WEB-INF/classes/edc2010/config/AppConfig.properties"/> <war destfile="${dist.dir}/${ant.project.name}.war" webxml="${work.space}/${ant.project.name}/WebRoot/WEB-INF/web.xml"> <!--<fileset dir="${work.space}/edc_web/WebRoot"/>--> <fileset dir="${work.space}/${ant.project.name}/WebContent"/> <!--<lib dir="${lib.dir}" />--> <lib dir="${webcore.lib}" /> </war> <delete dir="${tomcat.dir}"></delete> <delete file="${tomcat.dir}.war"></delete> <move tofile="${tomcat.dir}.war"> <fileset file="${dist.dir}/${ant.project.name}.war"></fileset> </move> </target> <!--全自动部署,启动关闭tomcat--> <target name="auto" depends="war" description="tomcat starting....."> <exec executable="${tomcat.home}/bin/startup.sh" spawn="true" vmlauncher="false"> <env key="CATALINA_HOME" value="${tomcat.home}" /> </exec> </target> </project>
3.ant脚本:ant.sh
#!/bin/bash ant -f build.xml -logger org.apache.tools.ant.listener.MailLogger -DMailLogger.properties.file=mail.properties
好了你需要在build.properties根据你自己的环境配置好,以后部署项目只要运行ant.sh就可以了。