专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » ant安装:ANT安装、配置 »正文

ant安装:ANT安装、配置

来源: 发布时间:星期四, 2009年2月12日 浏览:211次 评论:0


版权声明:可以任意转载转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.chedong.com/tech/ant.html

关键词:ant build.xml javac


内容摘要:
ant是个基于JAVA自动化脚本引擎脚本格式为XML除了做JAVA编译相关任务外ANT还可以通过插件实现很多应用


ANT基本概念:
ANT安装:解包设置路径
ANT使用:最好学习只不过是个简单实用例子起步……
ANT基本概念:JavaMakefile
个代码项目大了以后每次重新编译打包测试等都会变得非常复杂而且重复因此c语言中有make脚本来帮助这些工作批量完成在Java 中应用是平台无关性当然不会用平台相关make脚本来完成这些批处理任务了ANT本身就是这样个流程脚本引擎用于自动化完成项目编译打包测试等除了基于JAVA是平台无关脚本格式是基于XML比make脚本来说还要好维护


每个ant脚本(缺省叫build.xml)中设置了系列任务(target):比如对于项目可能需要有以下任务

任务1:usage 打印本脚本帮助信息(缺省)
任务2:clean <-- init 清空化环境
任务3:javadoc <-- build <-- init 生成JAVADOC
任务4:jar <-- build <-- init 生成JAR
任务5:all <-- jar + javadoc <-- build <-- init 完成以上所有任务:jar javadoc
而多个任务的间往往又包含了定了依赖关系:比如把整个应用打包任务(jar)这个依赖于编译任务(build)而编译任务又依赖于整个环境化任务(init)等

注:我看到很多项目ant脚本中命名基本上都是比如:编译般叫build或者compile;打包般叫jar或war;生成文档般命名为javadoc或javadocs;执行全部任务all在每个任务ANT会根据配置些外部应用并配以相应参数执行虽然ANT可外部应用种类非常丰富但其实最常用就23个:比如javac javadoc jar等
ANT安装
解包后在系统可执行路径中加入指向antbin路径就可以了比如可以在GNU/Linux上把以下配置加入/etc/profile中:
export ANT_HOME=/home/ant
export JAVA_HOME=/usr/java/j2sdk1.4.1
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin

这样执行ant 后如果不指定配置文件ant会缺省找build.xml这个配置文件并根据配置文件执行任务缺省任务设置可以指向最常用任务比如: build或指向打印帮助信息:usage告诉用户有那些脚本选项可以使用


ANT使用

最好学习过程就是看懂那些open source项目中build.xml脚本然后根据自己需要简化成个更简单ANT和APACHE上很多非常工程派项目:简单易用而且适应性非常强这些项目建立往往来源于开发人员日常最直接需求
以下是个WebLucene应用例子:修改自JDOMbuild.xml:

<project default=\"usage\" basedir=\".\">

<!-- = -->
<!-- Initialization target -->
<!-- = -->
<target name=\"init\">
<tstamp/>
<property file=\"${basedir}/build.properties\" />
<property name=\"Name\" value=\"ProjectFullName\"/>
<property name=\"name\" value=\"project_name\"/>
<property name=\"version\" value=\"0.2\"/>
<property name=\"year\" value=\"2003\"/>

<echo message=\"----------- ${Name} ${version} [${year}] ------------\"/>

<property name=\"debug\" value=\"off\"/>
<property name=\"optimize\" value=\"on\"/>
<property name=\"deprecation\" value=\"on\"/>

<property name=\"src.dir\" value=\"./src/WEB-INF/src\"/>
<property name=\"lib.dir\" value=\"./src/WEB-INF/lib\"/>
<property name=\"packages\" value=\"com.chedong.*,org.apache.lucene.*\"/>

<property name=\"build.src\" value=\"./src/WEB-INF/build\"/>
<property name=\"build.dest\" value=\"./src/WEB-INF/es\"/>
<property name=\"build.javadocs\" value=\"./src/doc\"/>

<path id=\"path\">
<pathelement path=\"${jsdk_jar}\"/>
<file dir=\"${lib.dir}\">
< name=\"**/*.jar\"/>
</file>
</path>

<filter token=\"year\" value=\"${year}\"/>
<filter token=\"version\" value=\"${version}\"/>
<filter token=\"date\" value=\"${TODAY}\"/>
<filter token=\"log\" value=\"true\"/>
<filter token=\"verbose\" value=\"true\"/>
</target>

<!-- = -->
<!-- Help _disibledevent=>


<target name=\"usage\" depends=\"init\">
<echo message=\"${Name} Build file\"/>
<echo message=\"-------------------------------------------------------------\"/>
<echo message=\"\"/>
<echo message=\" available targets are:\"/>
<echo message=\"\"/>
<echo message=\" jar --> generates the ${name}.jar file\"/>
<echo message=\" build --> compiles the source code\"/>
<echo message=\" javadoc --> generates the API documentation\"/>
<echo message=\" clean --> cleans up the directory\"/>
<echo message=\"\"/>
<echo message=\" Please rename build.properties.default to build.properties\"/>
<echo message=\" and edit build.properties to specy JSDK 2.3 path.\"/>
<echo message=\"\"/>
<echo message=\" See the comments inside the build.xml file for more details.\"/>
<echo message=\"-------------------------------------------------------------\"/>
<echo message=\"\"/>
<echo message=\"\"/>
</target>

<!-- = -->
<!-- Prepares the source code -->
<!-- = -->
<target name=\"prepare-src\" depends=\"init\">
<!-- create directories -->
<mkdir dir=\"${build.src}\"/>
<mkdir dir=\"${build.dest}\"/>

<!-- copy src files -->
<copy todir=\"${build.src}\">
<file dir=\"${src.dir}\"/>
</copy>
</target>

<!-- = -->
<!-- Compiles the source directory -->
<!-- = -->
<target name=\"build\" depends=\"prepare-src\">
<javac srcdir=\"${build.src}\"
destdir=\"${build.dest}\"
debug=\"${debug}\"
optimize=\"${optimize}\">
<path refid=\"path\"/>
</javac>
</target>

<!-- = -->
<!-- Creates the package -->
<!-- = -->
<target name=\"jar\" depends=\"build\">
<jar jarfile=\"${lib.dir}/${name}.jar\"
basedir=\"${build.dest}\"
s=\"**\"/>
</target>

<!-- = -->
<!-- Creates the API documentation -->
<!-- = -->
<target name=\"javadoc\" depends=\"build\">
<mkdir dir=\"${build.javadocs}\"/>
<javadoc packagenames=\"${packages}\"
sourcepath=\"${build.src}\"
destdir=\"${build.javadocs}\"
author=\"true\"
version=\"true\"
use=\"true\"
splitindex=\"true\"
windowtitle=\"${Name} API\"
doctitle=\"${Name}\">
<path refid=\"path\"/>
</javadoc>
</target>

<!-- = -->
<!-- Clean targets -->
<!-- = -->
<target name=\"clean\" depends=\"init\">
<delete dir=\"${build.src}\"/>
<delete dir=\"${build.dest}/org\"/>
<delete dir=\"${build.dest}/com\"/>
<delete>
<file dir=\"${build.dest}\" s=\"**/*.\"/>
</delete>
</target>
</project>
<!-- End of file -->

缺省任务:usage 打印帮助文档告诉有那些任务选项:可用有build, jar, javadoc和clean.

化环境变量:init
所有任务都基于些基本环境变量设置化完成是后续其他任务基础在环境化过程中有2点比较可以方便设置:

1 除了使用却缺省property设置了JAVA源路径和输出路径外引用了个外部build.properties文件中设置
<property file=\"${basedir}/build.properties\" />
这样大部分简单配置用户只要会看懂build.properties就可以了毕竟XML比起key value属性文件还是要可读性差用build.properties也可以方便其他用户从编译细节中解放出来



2 CLASSPATH设置:使用了其中:
<path id=\"path\">
<pathelement path=\"${jsdk_jar}\"/>
<file dir=\"${lib.dir}\">
< name=\"**/*.jar\"/>
</file>
</path>
则相当于设置了:CLASSPATH=/path/to/resin/lib/jsdk23.jar; /path/to/project/lib/*.jar;

文件复制:prepare-src
创建临时SRC存放目录和输出目录
<!-- = -->
<!-- Prepares the source code -->
<!-- = -->
<target name=\"prepare-src\" depends=\"init\">
<!-- create directories -->
<mkdir dir=\"${build.src}\"/>
<mkdir dir=\"${build.dest}\"/>

<!-- copy src files -->
<copy todir=\"${build.src}\">
<file dir=\"${src.dir}\"/>
</copy>
</target>

编译任务:build
编译时CLASSPATH环境通过下方式找到引用个path对象
<path refid=\"path\"/>

打包任务:jar
对应用打包生成项目所写名.jar文件
<!-- = -->
<!-- Creates the package -->
<!-- = -->
<target name=\"jar\" depends=\"build\">
<jar jarfile=\"${lib.dir}/${name}.jar\"
basedir=\"${build.dest}\"
s=\"**\"/>
</target>

生成JAVADOC文档任务: javadoc
<!-- = -->
<!-- Creates the API documentation -->
<!-- = -->
<target name=\"javadoc\" depends=\"build\">
<mkdir dir=\"${build.javadocs}\"/>
<javadoc packagenames=\"${packages}\"
sourcepath=\"${build.src}\"
destdir=\"${build.javadocs}\"
author=\"true\"
version=\"true\"
use=\"true\"
splitindex=\"true\"
windowtitle=\"${Name} API\"
doctitle=\"${Name}\">
<path refid=\"path\"/>
</javadoc>
</target>

清空临时编译文件:clean
<!-- = -->
<!-- Clean targets -->
<!-- = -->
<target name=\"clean\" depends=\"init\">
<delete dir=\"${build.src}\"/>
<delete dir=\"${build.dest}/org\"/>
<delete dir=\"${build.dest}/com\"/>
<delete>
<file dir=\"${build.dest}\" s=\"**/*.\"/>
</delete>
</target>

TODO:
更多任务/扩展:(样例)

测试任务:JUnit测试
代码风格检查任务:CheckStyleJalopy等
邮件警报任务:可以把以上这些任务输出警告发送到制定用户列表中这个任务可以设置每天自动运行

参考资料:

Jakarta ANT:
http://ant.apache.org

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: