目前说来,几乎每一个开源的知名Java项目(如Spring, Hibernate, Struts, Veiocity...)都会提供相应的ANT Build文件。
Java的配置就不多说了,最重要的是要有JAVA_HOME这个环境变量。
ANT的配置也很简单:
1. 去这里下载一个ANT的压缩包:http://ant.apache.org/bindownload.cgi
2. 将apache-ant-<version>.tar.gz解压到任意目录,假设为/home/jack/JavaLibraries/apache-ant-1.7.0
3. 设置环境变量,我采用的方法是编辑~/.bashrc文件对终端程序:
代码: 全选
sudo vim ~/.bashrc
代码: 全选
export ANT_HOME="/home/jack/JavaLibraries/apache-ant-1.7.0"
export PATH="${PATH}:${ANT_HOME}"
ant -version
如果出现:Apache Ant version 1.7.0 compiled on December 13 2006
或者类似的,就说明ANT配置成功。
接下来就是关于ANT的build.xml文件,这也是使用ANT的最重要的部分。在开始任何一个项目的时候,都应该确定自己项目的目录结构,当然,你也可以设计一种通用的目录结构,以下是我常用的目录结构:
代码: 全选
+ <project_dir>
+ src // 源码文件夹
+ java // Java实现代码
+ test // 测试代码
+ build // Class文件输出文件夹
+ classes
+ test
+ doc // 文档目录
+ src // 文档的源码(如Docbook XML或者latex)
+ api
+ test // 测试文档
+ html
+ pdf
+ resources // Images, CSS...
+ lib // Java包
+ build
+ runtime
目录结构确定好后,开始编写build.xml。Build文件的编写是很有学问的,呵呵,和目录结构一样,可以编写一个通用的。一般的Build文件主要由三大部分组成:Properties, Paths和Targets。Properties就不用说了,定义了一系列属性,如源码文件夹的位置,项目的名字等等;Paths主要定义了一系列的路径,如Classpath等等;Targets是最重要的,每一个Target都是一个ANT的目标,在命令行上输入ant <target_name>就可以执行相应的ANT目标,非常方便(前提是你得先写好ANT Build文件),Target底下包含一些列的命令来帮助完成该目标。
关于Properties的定义,有两种做法:
1. 直接用XML进行编写
2. 用Java Properties文件编写,然后进行导入
我想是个人就会选择第二种(当然,也要看情况而定),因为更简单。
针对于以上的目录结构,我一般的build.properties内容如下:
代码: 全选
src.dir = src
src.java = ${src.dir}/java
src.test = ${src.dir}/test
bin.dir = build
bin.java = ${bin.dir}/classes
bin.test = ${bin.dir}/test
lib.dir = lib
lib.bt = ${lib.dir}/build
lib.rt = ${lib.dir}/runtime
doc.dir = doc
doc.api = ${doc.dir}/api
doc.test = ${doc.dir}/test
doc.html = ${doc.dir}/html
doc.pdf = ${doc.dir}/pdf
doc.rsc = ${doc.dir}/resources
有了这些属性,编写Build文件就方便了。在Java开发中,最烦人的就是关于Classpath的设置,幸运的是ANT为我们提供了非常方便的Classpath设置方法:
代码: 全选
<path id="master.cp">
<fileset dir="${lib.rt}">
<include name="**/*.jar" />
</fileset>
<pathelement location="${bin.java}" />
<pathelement location="${bin.test}" />
</path>
代码: 全选
编译:
<javac ... classpathref="master.cp" />
运行:
<java ... classpathref="master.cp" />
Java的Build循环一般都是:CVS/SVN Checkout,Compile, Test, Documentation, Package。ANT可以帮助我们完成整个循环。我曾经在年纪里作过关于“XML与软件开发”的报告,里边有关于ANT是如何在软件开发中得到应用的,可以去这里下载幻灯片:http://www.blogjava.net/Files/anticlock ... slides.rar
幻灯片是用Python ReStructedText生成的S5格式,直接在Firefox中打开浏览。
一份我的Ant build.xml:
代码: 全选
<?xml version="1.0" encoding="UTF-8"?>
<project name="websterm" basedir=".">
<property file="build.properties" />
<path id="master.cp">
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
<pathelement location="${bin.java}" />
<pathelement location="${bin.test}" />
</path>
<target name="init">
<mkdir dir="${src.java}" />
<mkdir dir="${src.test}" />
<mkdir dir="${web.inf}" />
<mkdir dir="${lib.dir}" />
</target>
<target name="clean">
<delete dir="${bin.java}" />
<delete dir="${bin.test}" />
</target>
<target name="compile">
<mkdir dir="${bin.java}" />
<javac source="1.5"
target="1.5"
srcdir="${src.java}"
destdir="${bin.java}"
classpathref="master.cp" />
<copy todir="${bin.java}">
<fileset dir="${src.java}">
<exclude name="**/*.java" />
</fileset>
</copy>
</target>
<target name="test.compile">
<mkdir dir="${bin.test}" />
<javac source="1.5"
target="1.5"
srcdir="${src.test}"
destdir="${bin.test}"
classpathref="master.cp" />
<copy todir="${bin.test}">
<fileset dir="${src.test}">
<exclude name="**/*.java" />
</fileset>
</copy>
</target>
<target name="test">
<mkdir dir="${doc.test}" />
<junit printsummary="yes" haltonfailure="yes">
<classpath refid="master.cp" />
<formatter type="plain" usefile="no" />
<formatter type="xml" usefile="yes" />
<batchtest todir="${doc.test}" fork="yes">
<fileset dir="${src.test}">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
</target>
<target name="doc.api">
<mkdir dir="${doc.api}" />
<javadoc destdir="${doc.api}"
classpathref="master.cp"
version="true"
author="true"
windowtitle="Websterm API">
<fileset dir="${src.java}" defaultexcludes="yes">
<include name="**/*.java" />
</fileset>
<doctitle>
<![CDATA[<h1>Websterm API Documentation</h1>]]></doctitle>
</javadoc>
</target>
</project>
以上是我对Java开发的一些认识吧,我比较喜欢ANT,我也曾经用过许多IDE,Eclipse, Netbeans, IDEA,但是最后还是ANT最实用,因为不管走到哪里,我都只要把我的项目打个包,一解压,用ANT完成循环就行了,非常方便。如果有什么不妥或者需要说明之处,请大家一定提出高贵意见,谢谢