您的位置:首页 > 运维架构 > Apache

Apache Ant 基础使用小结

2012-09-20 16:53 465 查看

一直使用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}" />

<javac
classpathref="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>
<jar
basedir="${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">
<java
classname="${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 off
title Noise Data Gen (v0.1)

echo start generating ...

set CURRENT_DIR=%cd%
cd ..
set BASE_DIR=%cd%
set ANT_HOME=%BASE_DIR%\ant
set _RUN_ANT=%ANT_HOME%\bin\ant
cd %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}/libs
server.conf.dir=${server.dir}/conf

##
## 程序启动类(main类)
##
server.startup.class=com.codemouse.server.StartingServer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: