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文档 |
<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}" failοnerrοr="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