Ant可以代替使用javac、java和jar等命令来执行java操作,从而达到轻松的构建和部署Java工程的目的。下面来看几个知识点。
1. 利用Ant的javac任务来编译java程序
Ant的javac任务用于实现编译Java程序的功能。下面来看一个简单的例子:
首先我们建立名为antstudy的Java工程,建立src目录为源代码目录,在src目录下建立HelloWorld.java这个类文件。该类文件的内容如下:
class HelloWorld { public static void main(String[] args) { System.out.println("Hello,Amigo"); } }
同时在antstudy工程的根目录下建立build.xml文件,在该文件中编译src目录下的java文件,并将编译后的class文件放入build/classes目录中,在编译前,需清除classes目录,该文件的内容如下:
<xml version="1.0"?> <project name="javacTest"default="compile" basedir="."> <target name="clean"> <delete dir="build"/> </target> <target name="compile" depends="clean"> <mkdir dir="build/classes"/> <javac srcdir="src" destdir="build/classes"/> </target> </project>
运行该build.xml文件,可在工程中看到新增了build/classes目录,并在该目录中生成了编译后的HelloWorld.class文件。
2. 使用Ant的java任务运行Java程序
Ant中可以使用java任务实现运行Java程序的功能。下面在1的例子中进行如下的修改,修改后的build.xml文件的内容如下:
<xml version="1.0"?> <project name="javaTest" default="jar" basedir="."> <target name="clean"> <delete dir="build"/> </target> <target name="compile" depends="clean"> <mkdir dir="build/classes"/> <javac srcdir="src" destdir="build/classes"/> </target> <target name="run" depends="compile"> <java classname="HelloWorld"> <classpath> <pathelement path="build/classes"/> </classpath> </java> </target> </project>
运行该build.xml文件,可在控制台看到HelloWorld的main方法的输出。
3. 使用Ant的jar任务生成jar文件
读者可以在上例的基础上更进一步,来生成jar包,可在run这个target下再加上如下target:
<target name="jar" depends="run"> <jar destfile="helloworld.jar" basedir="build/classes"> <manifest> <attribute name="Main-class" value="HelloWorld"/> </manifest> </jar> </target>
此时将ant的project的default属性设置为jar,同时运行该build.xml文件,运行完毕后,可看到在工程目录下生成了一个jar包HelloWorld.jar。
4. 使用Ant的war任务打包J2EE Web项目
其中src为源代码目录,WebRoot为各jsp存放目录,lib为工程的包目录。在antwebproject工程目录下建立了build.xml文件,该文件为该工程的Ant构件文件。读者可以src目录下放入在前续例子中开发的HelloWorld.java文件,并在WebRoot下建立index.jsp文件,其内容很简单,就是输出Hello信息,代码如下所示:
<%=java contentType""-""-" <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>ant打包测试</title> </head> <body> Hello,Ant </body> </html>
接下来编写build.xml文件,其内容如下:
<xml version="1.0"?> <project name="antwebproject" default="war"basedir="."> <property name="classes" value="build/classes"/> <property name="build"value="build"/> <property name="lib"value="WebRoot/WEB-INF/lib"/> <!-- 删除build路径--> <target name="clean"> <delete dir="build"/> </target> <!-- 建立build/classes路径,并编译class文件到build/classes路径下--> <target name="compile" depends="clean"> <mkdir dir="${classes}"/> <javac srcdir="src" destdir="${classes}"/> </target> <!-- 打war包--> <target name="war" depends="compile"> <war destfile="${build}/antwebproject.war" webxml="WebRoot/WEB-INF/web.xml"> <!-- 拷贝WebRoot下除了WEB-INF和META-INF的两个文件夹--> <fileset dir="WebRoot" includes="**/*.jsp"/> <!-- 拷贝lib目录下的jar包--> <lib dir="${lib}"/> <!-- 拷贝build/classes下的class文件--> <classesdir="${classes}"/> </war> </target> </project>
各target的作用在内容中已经进行说明,在此不再赘述。运行该build文件,更新目录后,可看到在build目录下生成了antwebproject.war文件,解开后可看到其目录结构如下:
--META-INF --MANIFEST.MF --index.jsp --WEB-INF --lib --log4j-1.2.9.jar --classes --HelloWorld.class --web.xml
读者可以将该war包拷贝到Tomcat的目录下看一下运行结果。
4. 复杂的J2EE Web项目案例
本例按如下目录结构来组织项目。
D:/web/antsample项目根目录 D:/web/antsample/src源代码目录 D:/web/antsample/src/sample/HelloWorld.java示例HelloWorld代码文件 D:/web/antsample/app应用程序目录 D:/web/antsample/app/index.jsp默认首页文件 D:/web/antsample/app/WEB-INF D:/web/antsample/app/WEB-INF/web.xml应用程序描述文件 D:/web/antsample/app/WEB-INF/lib应用程序库目录 D:/web/antsample/context.xml应用程序环境配置文件,数据源、应用程序路径(path)、文档路径(docBase)等信息在此配置。 D:/web/antsample/build.xml
build.xml 文件内容
<?xml version="1.0" encoding="UTF-8"?><project name="antsample" default="jar" basedir="."> <property environment="env"/> <echo message="Ant 版本 ${ant.java.version}"/> <property name="tomcat.home" value="/home/xiaojf/tomcat6"/> <!-- tomcat目录 --> <property name="web.home" value="./app"/> <!-- 应用程序目录 --> <property name="src.home" value="./src"/> <!-- java源文件目录 --> <property name="jarFile" value="${web.home}/WEB-INF/lib/${ant.project.name}.jar"/> <!-- jar文件位置 --> <property name="warFile" value="./${ant.project.name}.war"/> <!-- war文件位置 --> <property name="srcDeployFile" value="./context.xml"/> <!-- 源部署文件 --> <property name="distDeployFile" value="${tomcat.home}/conf /Catalina/localhost/${ant.project.name}.xml"/> <!-- 源部署文件 --> <property name="jdk1.5" value="/usr/lib/jvm/jdk1.5/bin/javac"/> <!-- 设置jdk1.5编译器的全路径 --> <property name="jdk1.6" value="/usr/lib/jvm/jdk1.6/bin/javac"/> <!-- 设置jdk1.6编译器的全路径 --> <property name="javaCompiler" value="${jdk1.6}"/> <!-- 编译时使用的javac --> <!-- 设置 classpath,即编译时需要引用的库文件 --> <path id="classpath"> <fileset dir="${web.home}/WEB-INF/lib"> <!-- 引用应用程序WEB-INF/lib下的所有jar --> <include name="**/*.jar"/> </fileset> <fileset dir="${tomcat.home}/lib"> <!-- 引用Tomcat/lib下的所有jar --> <include name="**/*.jar"/> </fileset> </path> <!-- 清除已经生成的class文件 --> <target name="clean"> <delete> <fileset dir="${src.home}" includes="**/*.class"/> </delete> </target> <!-- 编译src.home下的所有java文件。fork被设置为true,这样可指定编译使用的JDK,此处使用jdk1.5。必须根据java源文件的编码来设置encoding。 --> <target name="compile" depends="clean"> <javac srcdir="${src.home}" debug="on" deprecation="on" optimize="off" includes="**" includeantruntime="on" encoding="UTF-8" fork="yes" executable="${javaCompiler}" > <classpath refid="classpath"/> <compilerarg value="-Xlint:unchecked"/> </javac> </target> <!-- 打包,并将jar放置在应用程序WEB-INF/lib下。 --> <target name="jar" depends="compile"> <jar destfile="${jarFile}" basedir="${src.home}" includes="**/*.class **/*.xml"/> </target> <target name="war" depends="jar"> <war destfile="${warFile}" basedir="${web.home}"/> </target> <!-- 布置应用程序到Tomcat --> <target name="deploy"> <copy file="${srcDeployFile}" tofile="${distDeployFile}"/> </target> <!-- 从Tomcat上卸载应用程序 --> <target name="undeploy"> <delete file="${distDeployFile}"/> </target></project>
运行本例,您必须修改build.xml中tomcat目录的全路径和context.xml中的相应信息。
进入D:/web/antsample,输入ant命令,即可编译程序,并将其生成的class文件打包成jar,布置到app/WEB-INF/lib下。
运行ant deploy 即可拷贝context.xml到Tomcat/conf/Catalina/localhost/antsample.xml,完成程序的布置。
运行ant undeploy 即可删除Tomcat/conf/Catalina/localhost/antsample.xml文件完成程序的卸载。
现在您可以输入 http://localhost:8080/antsample 来访问例子程序了。