三、利用ant 构建和部署Java项目
Ant 可以代替使用 javac 、 java 和 jar 等命令来执行 java 操作,从而达到轻松的构建和部署 Java 项目的目的。
1. 利用ant 的javac命令来编译Java程序
Ant 的javac命令用于实现编译Java 程序的功能。下面来看一个简单的例子:首先我们建立名为 JavaTestPro的Java项目,建立src目录为源代码目录,在src目录下建立HelloWorld.java这个类文件。该类文件的内容如下:
- public class HelloWorld {
- public static void main(String[] args) {
- System.out.println("hello world!");
- }
- }
同时在JavaTestPro项目的根目录下建立build.xml 文件,在该文件中编译sr 目录下的Java文件,并将编译后的class文件放入build/classes 目录中,整个项目的目录结构如下:
- |JavaTestPro
- |src
- |build
- |classes
- |build.xml
在编译前,需清除classes 目录,该文件的内容如下:
- <?xml version="1.0" ?>
- <project name ="javacTest" default="compile" basedir=".">
- <target name="clean">
- <delete dir="${basedir}/build"/>
- </target>
- <target name="compile" depends ="clean">
- <mkdir dir ="${basedir}/build/classes"/>
- <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/>
- </target>
- </project>
在项目根目录(C:\ThinkInJavaCode\JavaTestPro)执行ant命令后,可在该目录下发现新生成的build/classes子目录,编译后生成的HelloWorld.class文件就在该目录下。
2. 使用java命令执行Java程序
Ant 中可以使用 java命令实现运行Java程序的功能。可以在上面的build.xml基础上做修改来实现:
- <?xml version="1.0" ?>
- <project name ="javacTest" default="run" basedir=".">
- <target name="clean">
- <delete dir="${basedir}/build"/>
- </target>
- <target name="compile" depends ="clean">
- <mkdir dir ="${basedir}/build/classes"/>
- <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/>
- </target>
- <target name="run" depends ="compile">
- <java classname ="HelloWorld">
- <classpath>
- <pathelement path="${basedir}/build/classes"/>
- </classpath>
- </java>
- </target>
- </project>
接着,就可以在控制台看见输出:"[java] hello world!"
3. 使用jar命令生成jar文件
还可以在上例的基础上更进一步,来生成jar包,可在run 这个 target 下再加上如下 target :
- <?xml version="1.0" ?>
- <project name ="javacTest" default="jar" basedir=".">
- <target name="clean">
- <delete dir="${basedir}/build"/>
- </target>
- <target name="compile" depends ="clean">
- <mkdir dir ="${basedir}/build/classes"/>
- <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/>
- </target>
- <target name="run" depends="compile">
- <java classname ="HelloWorld">
- <classpath>
- <pathelement path="${basedir}/build/classes"/>
- </classpath>
- </java>
- </target>
- <target name="jar" depends="run">
- <jar destfile="helloworld.jar" basedir="${basedir}/build/classes">
- <manifest>
- <attribute name="Main-class" value="HelloWorld"/>
- </manifest>
- </jar>
- </target >
- </project>
其中,project的default 属性设置为应设为jar,ant运行完毕后,可看到在项目的根目录下生成了一个 helloworld.jar的jar包 。可通过运行以下命令来执行该jar包:
- java -jar helloworld.jar
4. 使用war命令打包JavaEE项目
建立一个JavaEE项目,其中src 为Java源代码目录,WebContent为各jsp存放目录,lib 为项目引用的的包的目录。在WebTest项目目录下建立了build.xml 文件,该文件为该工程的 Ant 构件文件。
- |WebContent
- |src
- |build
- |classes
- |WebContent
- |META-INF
- |MANIFEST.MF
- |WEB-INF
- |lib
- |classes
- |HelloJSP.jsp
- |build.xml
读者可以 src 目录下放入在前续例子中开发的 HelloWorld.java 文件,并在 WebContent下建立 HelloJSP.jsp 文件,其内容很简单,就是输出 Hello 信息,代码如下所示:
- <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
- <!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=UTF-8">
- <title>war test for ant</title>
- </head>
- <body>
- Hello JSP!Hello Ant!
- </body>
- </html>
接下来编写 build.xml 文件,其内容如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <project name ="WebTest" default ="war" basedir =".">
- <property name ="classes" value ="${basedir}/build/classes"/>
- <property name ="build" value ="${basedir}/build"/>
- <property name ="lib" value ="${basedir}/WebContent/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 ="${basedir}/src" destdir ="${classes}"/>
- </target>
- <!-- 打war 包-->
- <target name ="war" depends ="compile">
- <war destfile ="${build}/WebTest.war" webxml ="${basedir}/WebContent/WEB-INF/web.xml">
- <!-- 拷贝WebRoot 下除了WEB-INF 和META-INF 的两个文件夹-->
- <fileset dir ="${basedir}/WebContent" includes ="**/*.jsp"/>
- <!-- 拷贝lib 目录下的jar 包-->
- <lib dir ="${lib}"/>
- <!-- 拷贝build/classes 下的class 文件-->
- <classes dir ="${classes}"/>
- </war>
- </target>
- </project>
在C:\ThinkInJavaCode\WebTest目录下运行ant后,就生成了WebTest.war 文件了,然后可以将其放入Web容器(如Tomcat)的相应目录下(${Tomcata安装目录}\webapps)运行该web项目了。