Apache Ant 基础使用小结

来源:互联网 发布:matlab如何读取usb数据 编辑:程序博客网 时间:2024/04/29 04:59

一直使用ant编译部署java web程序, ant编译文件的编写也一直是参考平台现有的编译文件,然后结合自己项目的实际情况进行修改。现在开始慢慢转用Maven和Ivy+ant,于是重新梳理了下ant的知识,亲手编写一个完整的ant编译文件,以加固对ant的认识。

Ant 一些基础使用方法

我用ant做什么呢,对于java web工程,主要是编译工程,打包,部署。 对于一些后台的控制台程序,还使用ant来启动程序,最后写个简单的bat脚本。在windows系统下就可以通过运行bat文件来启动java控制台程序了。

Ant编译文件build.xml中的一些基础操作

1. 规划好项目的目录结构,ant不像maven,目录结构很随意,所以,要指定好程序源码目录,编译后class文件存放的目录,jar包部署的目录,配置文件的目录,依赖的jar包存放在哪个目录等。
2. 编译前,清理掉上次编译部署的文件。
3. 指定classpath信息,为编译准备。程序依赖的jar包,配置文件等,要添加到classpath中。不然编译通不过。
4. 编译程序,指定javac编译器,以及编译器的一些参数。
5. 打包,程序编译后的class文件,通常会在部署前打成jar包。
6. 部署,像web应用,最后我们通常是把ROOT目录下的内容拷贝带tomcat等服务器下面去运行,所以需要使用ant将配置文件,jar包等拷贝到ROOT目录下相应的文件夹中。

示例:
文件目录:

编译文件内容:
<?xml version="1.0" encoding="UTF-8"?><project name="simpleWebDemo" default="deploy"><!-- 声明项目的一些基础属性:项目名称,版本, 目录结构 --><property name="project.dir" value="." /><property name="project.name" value="simpleWebDemo" /><property name="project.version" value="v0.1" /><property name="project.build.dir" value="${project.dir}/build" /><property name="project.conf.dir" value="${project.dir}/conf" /><property name="project.src.dir" value="${project.dir}/src" /><property name="project.web.dir" value="${project.dir}/WebContent" /><property name="project.web.classes.dir" value="${project.web.dir}/WEB-INF/classes" /><property name="project.web.lib.dir" value="${project.web.dir}/WEB-INF/lib" /><!-- 声明编译后的jar包名称 --><property name="project.jar.file" value="${project.name}-server.jar" /><!-- 编译javac的参数值  --><!--modern: the standard compiler of JDK 1.3/1.4/1.5/1.6 --><property name="javac.compiler" value="modern" /><property name="javac.debug" value="on" /><property name="javac.deprecation" value="off" /><!--fork: Whether to execute javac using the JDK compiler externally; defaults to no. --><property name="javac.fork" value="true" /><property name="javac.memoryMaximumSize" value="256m" /><property name="javac.nowarn" value="on" /><!-- 设置classpath --><path id="project.classpath"><fileset dir="${project.web.lib.dir}" includes="**/*.jar" /><pathelement path="${project.conf.dir}" /></path><!-- 清理:将之前编译的的class文件,jar包, 及配置文件等清理掉 --><target name="clean"><delete><fileset dir="${project.web.classes.dir}" /></delete><delete><fileset dir="${project.build.dir}" /></delete><delete file="${project.web.lib.dir}/project.jar.file" failonerror="true" /></target><!-- 编译 --><target name="compile" depends="clean"><mkdir dir="${project.build.dir}" /><javacclasspathref="project.classpath" compiler="${javac.compiler}"debug="${javac.debug}" deprecation="${javac.deprecation}"fork="${javac.fork}"nowarn="${javac.nowarn}" memoryMaximumSize="${javac.memoryMaximumSize}" srcdir="${project.src.dir}"destdir="${project.build.dir}" encoding="utf-8" /></target><!-- 打包:生成jar包 --><target name="pakage" depends="compile"><tstamp><format property="jar.time" pattern="yyyy-MM-dd hh:mm" /></tstamp><jarbasedir="${project.build.dir}"jarfile="${project.web.lib.dir}/${project.jar.file}" ><manifest><section name="pakage-info"><attribute name = "package-by" value = "${user.name}" />   <attribute name = "package-date" value = "${jar.time}" />   <attribute name = "project-name" value = "${project.name}" />   <attribute name = "project-version" value = "${project.version}" />   </section></manifest></jar></target><!-- 部署: 将配置文件等拷贝到class文件夹下. --><target name="deploy" depends="pakage"><copy todir="${project.web.classes.dir}"><fileset dir="${project.conf.dir}" excludes="**/*.svn" /></copy></target></project>

使用Ant启动java控制台程序

对于java控制台程序的运行,就没有运行.net的控制台程序那么方便了, 通常需要写bat脚本,指定classpath,调用java指令来运行,使用ant,就方便一些。
<?xml version="1.0"?><project name="service" default="start-server"><!-- 定义目录信息 --><property name="server.bin.dir" value="." /><property name="server.dir" value="${server.bin.dir}/.." /><property name="server.libs.dir" value="${server.dir}/libs" /><property name="server.conf.dir" value="${server.dir}/conf" /><!-- 定义启动类:含main方法的类--><property name="server.startup.class" value="com.codemouse.server.StartingServer" /><!-- 定义classpath --><path id="server.classpath"><pathelement path="${server.bin.dir}" /><pathelement path="${server.conf.dir}" /><fileset dir="${server.libs.dir}" includes="**/*.jar" /></path><!-- 调用java指令运行程序 --><target name="start-server"><javaclassname="${server.startup.class}"classpathref="server.classpath"fork="true"maxmemory="1024m"newenvironment="true"dir="${server.dir}"><jvmarg value="-DClientID=dataGen_clientID  -Duser.timezone=GMT+8:00" /></java></target></project>

然后写个简单的启动脚本startup.bat, 就可以运行程序了。内容如下, 需要设置ant的目录,部署的时候ant目录需要一起发布
@echo offtitle Noise Data Gen (v0.1)echo start generating ...set CURRENT_DIR=%cd%cd ..set BASE_DIR=%cd%set ANT_HOME=%BASE_DIR%\antset _RUN_ANT=%ANT_HOME%\bin\antcd %CURRENT_DIR%"%_RUN_ANT%" -buildfile %CURRENT_DIR%\service.xml -e start-server


编写build.xml文件一些好的习惯

1. 使用 import 将冗长的build.xml文件按逻辑拆分: 比如将通用的一些内容放在build-common.xml文件中,然后在build.xml文件开头用import包含进来<import file="build-common.xml"/>
<property name="javac.memoryMaximumSize" value="256m" /><property name="javac.nowarn" value="on" /><import file="build-common.xml"/><!-- 清理:将之前编译的的class文件,jar包, 及配置文件等清理掉 --><target name="clean"><delete><fileset dir="${project.web.classes.dir}" /></delete><delete><fileset dir="${project.build.dir}" /></delete><delete file="${project.web.lib.dir}/project.jar.file" failonerror="true" /></target>


2. 使用build.properties文件声明一些基础属性, 将build.xml前面冗长的属性声明写在build.properties文件中,然后在build.xml文件中包含进来
<project name="service" default="start-server"><property name="server.bin.dir" value="." /><property file="build.properties" />
build.properties文件内容
#### 根目录##server.dir=${server.bin.dir}/..server.libs.dir=${server.dir}/libsserver.conf.dir=${server.dir}/conf#### 程序启动类(main类)##server.startup.class=com.codemouse.server.StartingServer



原创粉丝点击