1.
Ant是apache的一个开源代码项目,它是一个优秀的软件工程管理工具。ANT本身用java语言实现,并且使用xml格式的配置文件来构建工程,可以很方便地实现多平台编译,非常适合管理大型工程。
本篇将介绍如何用Ant工具来创建和发布struts应用。
在开发阶段,我们需要建立和准备各种类型的文件,如java源代码,java Class文件,jar文件,jsp文件,html文件,xml文件,tld文件和属性文件等等……。到了应用的发布阶段,需要把相关文件打包为war文件再发布。合理地组织这些文件的目录结构,可以简化项目的统一管理与开发工作。下面介绍一种常用的开发目录结构。
app.home-----------+ --Web应用项目的顶层目录 +----build ---存放由Ant工具生成的web应用的开放目录结构 +----deploy ---存放由Ant工具生成的web应用的WAR文件 +----doc ---存放由Ant工具生成的JavaDoc文件 +----lib ---存放所有的Jar文件 +----classes ---存放由Ant编译生成的.class文件 +----src ---存放Java源文件和属性文件 +----webRoot(或者是web) ---存放web应用的jsp,html 和 图片 以及css和js文件 | | +----web_INF ---存放web.xml,struts.xml,和TLD文件等
2.
ant的下载地址是:http://ant.apache.org/,下载下来后,我们需要在操作系统中配置如下的环境变量:
ANT_HOME :ANT的安装目录
JAVA_HOME :JDK的安装目录
PATH :把%ANT_HOME%/bin目录添加到PATH变量中,以便于从DOS命令行下直接运行ANT。(针对windows环境的)
3.
用ant编译规模较大的工程非常方便,每个工程都对应一个build.xml文件,这个文件包含与这个工程有关的路径信息和任务。每个bulid.xml文件都包含一个<project>和至少一个<target>元素。<target>元素中包含一个或多个任务元素,任务是一段可执行代码。ant提供了内置任务,用户可以开发自己的任务元素。
ANT任务 | 描述 |
---|---|
property | 设置name/value形式的属性 |
mkdir | 创建目录 |
copy | 拷贝文件和文件夹 |
delete | 删除文件和文件夹 |
javac | 编译java源文件 |
war | 为web应用打包 |
javadoc | 为java源文件创建javadoc文档 |
一个应用项目的根目录下包括build.xml和build.properties文件,此外还包含lib,src,web三个子目录。
<project name ="HelloApp" default="help" basedir="."> <!-- ===============property定义=============== --> <property file="build.properties"/> <property file="app.home" value="."/> <property file="app.name" value="HelloApp"/> <property file="javadoc.pkg.top" value="hello"/> <property file="src.home" value="${app.home}/src"/> <property file="lib.home" value="${app.home}/lib"/> <property file="classes.home" value="${app.home}/classes"/> <property file="deploy.home" value="${app.home}/deploy"/> <property file="doc.home" value="${app.home}/doc"/> <property file="web.home" value="${app.home}/web"/> <property file="build.home" value="${app.home}/build"/> <property file="build.classes" value="${build.home}/WEB-INF/classes"/> <property file="build.lib" value="${build.home}/WEB-INF/lib"/> <!-- ===============编译路径compilation classpath=============== --> <path id="compile.classpath"> <pathelement location="${classes.home}"/> <fileset dir="${lib.home}"> <include name="*.jar"> <include name="*.zip"> </fileset> <fileset dir="${tomcat.home}/common/lib"> <include name="*.jar"> </fileset> <pathelement location="${tomcat.home}/common/lib"/> </path> <!-- ==============="clean-all" Target=============== --> <!-- 负责删除web应用项目根据目录下的build,classes,deploy和doc子目录,并且删除发布到web服务器中的web应用 --> <target name="clean-all"> <delete dir="${build.home}"/> <delete dir="${classes.home}"/> <delete dir="${deploy.home}"/> <!-- 如果tomcat running,是不能delete的 --> <delete dir="${webapps.home}/${app.name}" failonerror="false"/> <!-- 如果tomcat running,是不能delete的 --> <delete dir="${webapps.home}/${app.name}.war"/> <delete dir="${doc.home}"/> </target> <!-- ==============="prepare" Target=============== --> <!-- 负责在web应用项目根目录下创建classes,deploy,doc,doc/api,build,build/WEB-INF--> <!--build/WEB-INF/classes,build/WEB-INF/lib子目录 --> <target name="prepare"> <mkdir dir="${classes.home}"/> <mkdir dir="${deploy.home}"/> <mkdir dir="${doc.home}"/> <mkdir dir="${doc.home}/api"/> <mkdir dir="${build.home}/WEB-INF"/> <mkdir dir="${build.home}/WEB-INF/classes"/> <mkdir dir="${build.home}/WEB-INF/lib"/> </target> <!-- ==="compile" Target=负责编译src子目录下的java源文件,把编译生成的类文件存放在classes子目录下=== --> <target name="compile" depends="prepare"> <!-- javac任务用于编译java源程序,java源程序位于srcdir属性指定的文件夹中--> <!-- 生成类文件存放在destdir属性指定的文件夹中,其目录结构与java的package一致--> <javac srcdir="${src.home}" destdir="${classes.home}" debug="yes"/> <classpath refid="compile.classpath"/> </javac> </target> <!-- ==============="build" Target=============== --> <target name="build" depends="compile"> <!-- 拷贝webapp content下的jsp,html,tld,xml等,也会拷贝META-INF目录的 =>到build目录--> <copy todir="${build.home}"> <fileset dir="${web.home}"/> </copy> <!-- 现在开始拷贝所有的java class文件 =>到build/WEB-INF/classes --> <copy todir="${build.home}/WEB-INF/classes"/> <fileset dir="${classes.home}"/> </copy> <!-- 现在开始拷贝src下的所有配置文件 =>到build/WEB-INF/classes--> <copy todir="${build.home}/WEB-INF/classes"> <fileset dir="${src.home}"/> <include name="**/*.properties"/> <include name="**/*.prop"/> </fileset> </copy> <!-- 现在开始拷贝所有的jar配置文件 => 到build/WEB-INF/lib下 --> <copy todir="${build.home}/WEB-INF/lib"> <fileset dir="${lib.home}"/> </copy> <!-- 现在开始打包成war包 ,存放在deploy目录下--> <jar jarfile="${deploy.home}/${app.name}.war" basedir="${build.home}"/> </target> <!-- ==============="deploy" Target==负责把deploy目录下的.war包文件发布到tomcat服务器的webapps子目录下=========== --> <target name="deploy" depends="build"> <copy todir="${webapp.home}" file="${deploy.home}/${app.name}.war"/> </target> <!-- ==============="doc" Target===负责编译src目录下的java文件,在doc/api目录下生成javaDoc文档============ --> <target name="javadoc" depends="compile"> <javadoc sourcepath="${src.home}" destdir="${doc.home}" packagenames="${javadoc.pkg.top}.*"/> </target> </project></span>
4.
build.xml文件首先通过property任务来设置属性,一个工程可以设置很多属性,属性有名字和值构成。
与web服务器相关的属性存放在单独的build.properties文件中。build.properties文件的内容如下:
tomcat.home = c:/jakarta-tomcat
webapps.home = c:/jakarta-tomcat/webapps
tomcat.home属性代表tomcat的根目录,webapps.home属性代表tomcat上发布web应用的目录。可以根据本地机器的实际环境来设置这写属性。
5.
运行<ANT_HOME>/bin/ant.bat脚本,将执行ant命令。如果不带任何参数,ant会在当前路径下搜索build.xml文件,如果找到,就运行<project>元素的default属性指定的target。
在运行ant时,也可以通过参数来指定build.xml文件和target,其语法如下:
ant -buildfile <build-dir>/build.xml targetnames
例:ant -buildfile c:/helloapp/build.xml deploy
然后ant会依次运行hellpapp应用的deploy,javadoc target等。
如果要执行指定的target属性的话,可以直接用命令指定属性名.譬如:
ant deploy