关于Java中ANT的配置和使用

软件和网站开发以及相关技术探讨
回复
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

关于Java中ANT的配置和使用

#1

帖子 anticlockwise » 2007-04-22 15:41

看到Ubuntu论坛中Java版里边几乎都是讨论Eclipse和Netbeans的使用和配置,很少见到有关于ANT的。其实ANT是学Java必不可少的一样工具,即Java进行持续整合不可少的工具。
目前说来,几乎每一个开源的知名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
如果是WEB开发的项目,目录结构就有所不同,例如会添加web文件夹,里边包含了整个WAR文件里的所有内容,这样打包就非常方便。

目录结构确定好后,开始编写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.xml中进行导入:<property file="build.properties" />
有了这些属性,编写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>
然后在编译和运行Java程序的时候,可以分别这样用:

代码: 全选

编译:
<javac ... classpathref="master.cp" />
运行:
<java ... classpathref="master.cp" />
当然,你也可以将编译时和运行时的Classpath分开,以上是将两个合并了。

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完成循环就行了,非常方便。如果有什么不妥或者需要说明之处,请大家一定提出高贵意见,谢谢
头像
ahu_917
帖子: 3
注册时间: 2007-04-18 11:09

#2

帖子 ahu_917 » 2007-06-13 15:18

留个脚印,经常溜溜。
上次由 ahu_917 在 2009-11-03 15:40,总共编辑 1 次。
头像
seaway
帖子: 88
注册时间: 2006-06-27 16:37
来自: china
联系:

#3

帖子 seaway » 2007-06-13 15:39

ant我以前一直用,不过现在已经基本被maven所代替了,不过我的linux上还是都安装的。
其实大多数JAVA程序只要配个环境变量就可以使用了,至于怎么使用建议大家还是学会看doc
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

#4

帖子 anticlockwise » 2007-06-22 14:01

seaway 写了:ant我以前一直用,不过现在已经基本被maven所代替了,不过我的linux上还是都安装的。
其实大多数JAVA程序只要配个环境变量就可以使用了,至于怎么使用建议大家还是学会看doc
恩,MAVEN我也用过,但还是觉得别扭,呵呵,个人习惯不同吧~~
喜欢Java的话希望能多交流,我的MSN和GMAIL资料里都有的
头像
magicalboy
帖子: 32
注册时间: 2008-06-05 12:39
联系:

Re: 关于Java中ANT的配置和使用

#5

帖子 magicalboy » 2009-09-19 9:11

后来者居上,哈哈 :em05
wujiwh
帖子: 18
注册时间: 2008-11-03 16:06
联系:

Re: 关于Java中ANT的配置和使用

#6

帖子 wujiwh » 2011-11-28 14:08

求助:root 用户配置的ant ,普通用户使用 ant -version 显示没有安装
ybtsdst
帖子: 2
注册时间: 2012-02-18 11:31

Re: 关于Java中ANT的配置和使用

#7

帖子 ybtsdst » 2012-02-18 11:34

请问关于ant中的copy task,涉及到权限问题该怎么处理,比方说部署war;
如果sudo ant的话部署不正常,难道要用ant的exec然后sudo cp么。。。。。
求教~~
ybtsdst
帖子: 2
注册时间: 2012-02-18 11:31

Re: 关于Java中ANT的配置和使用

#8

帖子 ybtsdst » 2012-02-18 14:54

ybtsdst 写了:请问关于ant中的copy task,涉及到权限问题该怎么处理,比方说部署war;
如果sudo ant的话部署不正常,难道要用ant的exec然后sudo cp么。。。。。
求教~~
自己解决了,还是从权限角度出发,将目录的owner修改为当前用户~~
头像
linforest
帖子: 129
注册时间: 2008-12-23 16:38

Re: 关于Java中ANT的配置和使用

#9

帖子 linforest » 2014-08-07 15:48

收藏一下 :em11 :em11 :em11
回复