说明:
1. 目标: 满足基本Java项目的全面构建和部署需求。
2. 参照NetBeans的build.xml设计,结构如图:
3. build.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Project Name" default="default" basedir=".">
<description>Builds, tests, and runs the project.</description>
<!-- ********************************************************
引入资源和定义资源
******************************************************** -->
<!--
引入资源
-->
<property file="build.properties"/>
<property environment="env"/>
<!--
定义源程序文件夹
-->
<property name="src.dir" location="src/java"/>
<property name="test.dir" location="test"/>
<property name="web.dir" location="web"/>
<!--
定义目标程序文件夹
-->
<property name="build.dir" location="build"/>
<property name="build.classes.dir" location="${build.dir}/classes"/>
<property name="build.test.dir" location="${build.dir}/test"/>
<property name="dist.dir" location="dist"/>
<!--
定义其他文件夹
-->
<property name="lib.dir" location="lib"/>
<property name="doc.dir" location="doc"/>
<property name="index.dir" location="index"/>
<property name="deploy.dir" location="${env.CATALINA_HOME}"/>
<property name="deploy.lib.dir" location="${deploy.dir}/lib"/>
<!--
定义其他文件
-->
<property name="dist.jar" location="${dist.dir}/WEB-INF/lib/${project.name}-${project.version}.jar"/>
<property name="deploy.war" location="${deploy.dir}/webapps/${project.name}.war"/>
<!--
定义其他属性
-->
<available file="${dist.dir}/enduser.agreement" property="final.version"/>
<!-- ********************************************************
设置path
******************************************************** -->
<path id="project.classpath">
<pathelement location="${java.home}/jre/lib/rt.jar"/>
<pathelement location="${build.classes.dir}"/>
<pathelement location="${build.test.dir}"/>
<fileset dir="${deploy.lib.dir}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="init" description=" 信息 : 显示项目基本信息.">
<tstamp>
<format property="now" pattern="yyyy-MM-dd HH:mm"/>
</tstamp>
<echo> ==================================================
||
|| 显示项目基本信息.
||
|| 项目名称: ${project.name}
|| 项目版本: ${project.version}
|| 作者 : ${author}
|| 时戳 : ${DSTAMP}-${TSTAMP}
||
|| 用法:
|| ant -buildfile build.xml compile 或
|| ant compile 或
|| ant 甚至
|| ant clean dist
|| 帮助:
|| ant -projecthelp
||
==================================================</echo>
</target>
<target name="prepare" depends="init" description=" 准备 : 创建各种文件夹.">
<echo> ==================================================
||
|| 创建各种文件夹.
||
================================================== </echo>
<!-- 创建源程序文件夹 -->
<mkdir dir="${src.dir}"/>
<mkdir dir="${test.dir}"/>
<mkdir dir="${web.dir}"/>
<mkdir dir="${web.dir}/WEB-INF"/>
<!-- 创建目标程序文件夹 -->
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.test.dir}"/>
<mkdir dir="${dist.dir}"/>
<mkdir dir="${dist.dir}/WEB-INF"/>
<mkdir dir="${dist.dir}/WEB-INF/lib"/>
<!-- 创建其他文件夹 -->
<mkdir dir="${lib.dir}"/>
<mkdir dir="${doc.dir}"/>
<mkdir dir="${index.dir}"/>
</target>
<target name="javadoc" depends="prepare" description="生成文档: 生成帮助文档.">
<echo> ==================================================
||
|| 生成帮助文档.
||
==================================================</echo>
<javadoc packagenames="*.*" sourcepath="${src.dir}" destdir="${doc.dir}" author="true" version="true" use="true" encoding="UTF-8">
<classpath refid="project.classpath"/>
</javadoc>
</target>
<target name="compile" depends="prepare" description=" 编译 : 编译所有源程序." unless="final.version">
<echo> ==================================================
||
|| 编译所有源程序.
||
==================================================</echo>
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" encoding="UTF-8">
<compilerarg value="-Xlint:unchecked"/>
<classpath refid="project.classpath"/>
</javac>
<javac srcdir="${test.dir}" destdir="${build.test.dir}" encoding="UTF-8">
<compilerarg value="-Xlint:unchecked"/>
<classpath refid="project.classpath"/>
</javac>
</target>
<target name="test" depends="compile" description=" 测试 : 运行所有测试程序.">
<echo> ==================================================
||
|| 运行所有测试程序.
||
==================================================</echo>
<junit haltonfailure="true">
<classpath refid="project.classpath"/>
<formatter type="brief" usefile="false"/>
<batchtest>
<fileset dir="${build.test.dir}" includes="**/*Test.class"/>
</batchtest>
<sysproperty key="doc.dir" value="${doc.dir}"/>
<sysproperty key="index.dir" value="${index.dir}"/>
</junit>
</target>
<target name="dist" depends="compile" description=" 分发 : 生成分发文件.">
<echo> ==================================================
||
|| 生成分发文件:
|| ${dist.jar}
||
==================================================</echo>
<!-- 从打包文件排除单元测试 -->
<jar destfile="${dist.jar}" basedir="${build.classes.dir}" includes="**/*.*" excludes="**/*Test.class">
<!-- manifest="MANIFEST.MF" > -->
<manifest>
<attribute name="Author" value="${author}"/>
</manifest>
</jar>
</target>
<!-- ********************************************************
用于调试
******************************************************** -->
<target name="debug" depends="dist" description=" 调试 "/>
<!-- ********************************************************
用于效验
******************************************************** -->
<target name="verify" depends="dist" description=" 效验 "/>
<target name="run-deploy" depends="dist" description=" 部署 : 把文件部署到指定位置.">
<echo> ==================================================
||
|| 把文件部署到指定位置:
|| ${deploy.war}
||
==================================================</echo>
<copy todir="${dist.dir}/WEB-INF/lib">
<fileset dir="${lib.dir}" includes="*.jar"/>
</copy>
<copy todir="${dist.dir}">
<fileset dir="${web.dir}" includes="**/*.*"/>
</copy>
<jar destfile="${deploy.war}" basedir="${dist.dir}" includes="**/*.*" excludes="**/*Test.class">
<!-- manifest="MANIFEST.MF" > -->
<manifest>
<attribute name="Author" value="${author}"/>
</manifest>
</jar>
</target>
<target name="run" depends="run-deploy" description=" 运行 : 运行指定类的main()函数." unless="Main.classFile">
<echo> ==================================================
||
|| 运行类:
|| ${main.classname}.main()函数.
||
==================================================</echo>
<java dir="${build.classes.dir}" ClassName="${main.classname}">
<classpath refid="project.classpath"/>
</java>
</target>
<target name="clean" depends="init" description="清理所有: 删除生成的目录和文件.">
<echo> ==================================================
||
|| 删除生成的目录和文件.
||
==================================================</echo>
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
<delete dir="${doc.dir}"/>
<delete file="${deploy.war}"/>
</target>
<!-- ********************************************************
用于执行默认目标
******************************************************** -->
<target name="default" depends="dist,javadoc" description=" 默认 :执行默认目标"/>
<!-- ********************************************************
用于执行全部目标: 信息、清理、准备、编译、测试、分发、文档、部署、运行.
******************************************************** -->
<target name="all" depends="clean,test,default,run" description=" 全部 : 执行全部目标: 信息、清理、准备、编译、测试、分发、文档、部署、运行."/>
</project>
4. build.properties:
author=interai
project.name=ProjectName
project.version=1.0
main.classname=Main
5. 其他说明:
使用Tomcat,需要配置:CATALINA_HOME环境变量。
以及需要安装Java SDK和Ant。
(over)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/JSFCN/archive/2009/09/18/4567421.aspx