Ant介绍以及基本使用指南
Ant介绍以及基本使用指南
Ant 是著名Java开源组织Apache的一个项目,是一个基于java的build工具。它可以使你通过ant脚本语言,自动你的项目拷贝到某个目录,发布项目,或者生成一些代码,执行SQL语言。总之它可以帮助你完成项目开发中除了开发代码以外的大部分辅助性工作。为什么需要手工去编写ant脚本呢,很多IDE工具会为我们生成ant脚本阿?有人会这么问。要知道靠IDE自动生成的东西,总是有这样那样的缺点,以及不足,他不能完全满足你的很多需要。如果出现了问题,你不得不手动修改ant脚本,这时候如果你不了解ant那么你将会一筹莫展。所以为了能使自己的项目变得更专业化,或者想在领导面前show一下的话(有时候很有用)。还是了解一下ant吧。
Ant 的安装使用
安装
Ant安装很简单,只要你从apache网站上下载他的zip包,然后解压到任何本地磁盘上,在环境变量中添加 Path 的值加上 %ANT_HOME%/bin 就可以了,这样在Dos提示符中就可以使用 ant 这个命令了。其他的你需要设置一下 ANT_HOME 这个环境变量为你解压后的目录。还有就是你要检查一下你的JDK安装目录JAVA_HOME是不是加到你的环境变量里面去了。
使用
概述
使用ant 也同样是非常简单的事。通常的做法就是在你的项目里面建立一个XML文件,名字通常可以取 build.xml 。当然你可以取任何你喜欢的名字。这个文件就是你需要ant为你项目做的一些辅助性工作的批处理文件。他的格式可能是这样的。我们先不具体说ant 标记,先有一个感性的认识会比较快的上手。
例子:
<?xml version="1.0" encoding="UTF-8"?>
<project default="all" name="pluto-project" basedir=".">
<target name="all" depends="api, container, portal">
</target>
<target name="clean" depends="api-clean, container-clean, portal-clean">
</target>
<target name="api">
<property name="final.name" value="portlet-api-@@DATE@@"/>
<ant antfile="build.xml" dir="api" target="jar" inheritAll="false" />
</target>
<target name="api-clean">
<ant antfile="build.xml" dir="api" target="clean" inheritAll="false" />
</target>
<target name="container" depends="api">
<ant antfile="build.xml" dir="container" target="jar" inheritAll="false" />
</target>
<target name="container-clean">
<ant antfile="build.xml" dir="container" target="clean" inheritAll="false" />
</target>
<target name="portal" depends="container">
<ant antfile="build.xml" dir="portal" target="jar" inheritAll="false" />
</target>
<target name="portal-clean">
<ant antfile="build.xml" dir="portal" target="clean" inheritAll="false" />
</target>
</project>
这个build.xml 文件引自apache的一个项目。里面可以看到有 project 以及target 标签。有些项目的build.xml可能不是以<?xml version="1.0" encoding="UTF-8"?>开头的,不过没关系,以后再说明。每一个build.xml 只能有一个project 标签, 每个project 标签里面包含了几个tartget标签。每一个target可以独立执行或者依赖于其他target执行完毕才能执行。
以下是一个典型的例子。
<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
当中target A 可以独立执行,但是B、C、D 则依赖于其他target才可以执行,也就是说,执行D, ant 就会按照 A- B- C 这样的顺序先执行其他target。
Project 标签里面有一个 default="all" ,这就是说明了在默认情况下 all 这个target 会被执行。
定义变量
在这个文件中没有看到属性定义,其实如果你想使用定义变量的话,可以在project 标签下 定义如这样的标签
<project ……>
<property name="src" location="src"/>
<property name="build" location="build"/>
<target ……>
这样你在引用的时候就可以使用形如${build}
<target name="init">
……
<mkdir dir="${build}"/>
……
</target>
这样的变量了,省得自己去修改每一处需要用到变量的地方
添加目录操作
<target name="init">
<mkdir dir="${dist.dir}" />
<mkdir dir="${dist.classes.dir}" />
<mkdir dir="${dist.webapps.dir}" />
</target>
这里的dist.dir 等用${}括起来的,是我们定义的变量。
编译java文件的操作
<target name="compile">
<javac srcdir="${src.dir}" destdir="${dist.classes.dir}" debug="true" encoding="GBK">
<classpath refid="classpath" />
</javac>
<jar destfile="${dist.classes.dir}/lib/app.jar" basedir="${dist.classes.dir}"/>
</target>
这里说一下 javac 这个任务标签
其中看到 有 srcdir 、destdir、debug 、encoding 等属性,还有一个 classpath 的子标签。Srcdir就是目标source,需要编译的源文件,destdir就是目的地,编译出来的class的存放地。Debug参数是指明source是不是需要把debug信息编译进去,如果不加这个参数等于在命令行后面加上 -g:none 这个参数。Encoding 这个参数指明以何种编码方式编码你的source文件,对于有中文文字的代码来说这项比较重要。
Classpath 指明了你需要应用的jar包,或者其它class文件的所在地,这也是非常重要的一项选项。使用方式有以下几种。
<property name="lib.dir" value="${basedir}/lib" />
…….
<path id="classpath">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
……
<classpath refid="classpath" />
作为classpath 引用预先定义的jar包位置,refid 指明了一个引用变量。一般在real-world情况下会这样使用。简单的使用是这样的:
<javac srcdir="${src}"
destdir="${build}"
classpath="xyz.jar"
debug="on"
/>
这就简单了点。
打jar包操作
<jar destfile="${dist}/lib/app.jar" basedir="${dist.classes.dir}"/>
这个就是把编译好的文件打成jar包的ant 脚本,和上面javac一样,可以放在任意位置。很明显destfile 就是 你想要打成的包,basedir就是你的目标class文件,其它的复杂参数手册上都有,可以对照参考。
<jar destfile="${dist}/lib/app.jar">
<fileset dir="${build}/classes"
excludes="**/Test.class"
/>
<fileset dir="${src}/resources"/>
</jar>
上面这段脚本也很容易理解,就是除了Test.class文件以外,把一个source的resource目录,连同编译后的class脚本一起打进app.jar包内。
复制文件操作
<copy todir="${dist.webapps.dir}/WEB-INF/lib" overwrite="true" flatten="true">
<fileset dir="${lib.dir}">
<include name="*.jar" />
<exclude name="j2ee.jar" />
</fileset>
</copy>
上面脚本很容易理解。 Todir 指定了需要拷贝的地点,overwrite 是否需要覆盖,flatten是否忽略目的目录结构,只得是不管什么目录,直接拷贝文件到目的地,丢弃其所在结构。
<fileset dir="${lib.dir}">
<include name="*.jar" />
<exclude name="j2ee.jar" />
</fileset>
选定除了j2ee.jar包以外的所有在lib.dir变量所定义的包下面的jar包
其它拷贝样式
<copy file="myfile.txt" todir="../some/other/dir"/>
单文件拷贝
<copy file="myfile.txt" todir="../some/other/dir"/>
文件到目录拷贝
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
目录对拷贝
比较有用的命令
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Foo Bar"/>
</filterset>
</copy>
拷贝 sr_dir 目录到 backup/dir目录,并且把所有文件中的 @TITLE@ 替换成 Foo Bar 。还有很多用法,等到要使用的时候可以去查手册。
删除操作
<target name="clean">
<delete dir="${dest.dir}"/>
<delete file="${dest2.dir}"/>
</target>
以上操作也是很容易理解的。
执行ant 脚本
在有build.xml 的目录提示符下使用 ant 就可以了。如果是其他的名字,那就使用ant -buildfile <文件名> 就可以了。
其它的就是在具体开发过程中real-world式的比较经典的一些操作。比方说利用XDoclet自动生成hibernate配置文件,执行SQL脚本,这些会在后续介绍中详细描述用法。掌握了它们,你就是会在生产过程中大大提高工作效率,别人也会对你刮目相看的,别忘了和你的同事分享哦。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/430971.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!相关文章:

Ant介绍以及基本使用指南
Ant介绍以及基本使用指南 Ant 是著名Java开源组织Apache的一个项目,是一个基于java的build工具。它可以使你通过ant脚本语言,自动你的项目拷贝到某个目录,发布项目,或者生成一些代码,执行SQL语言。总之它可以帮助你完成…...

j2ee程序员应该掌握的linux知识
一般大型J2EE应用都在建构在linux环境下的。开发环境下我们可以通过samba映射成本地的网络驱动器,直接在windows环境下进行编程调试。但是最后的发布还是要到linux环境,同时我们对网上web服务器和数据库服务器的应用管理(比如自动脚本发布等)…...

Java学习从入门到精通
Java Learning Path (一)、工具篇一、 JDK (Java Development Kit)JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质…...

Struts--HTML标签库(-)(转)
Struts提供了一个强大的HTML标签库来帮助你构建Web应用程序。 by Budi Kurniawan 为了更容易、更快速地进行开发,Struts提供了功能同其它JSP标签库类似的五个标签库,即:HTML、Bean、Logic、Template和Nested。。第一部分讲述如何配置一个S…...

Struts提供的和Form相关的标签(转)
继续学习Struts提供的HTML标签库。 by Budi Kurniawan 在本文系列的第一部分中我讲述了如何使用Struts提供的HTML标签库来配置一个Struts应用程序。我还介绍了该标签库中的一类标签:独立使用的标签。在第二部分中我将继续介绍第二类标签:与form相关的标…...

struts中文问题,struts国际化问题的终极解决方案(转)
Java本身就支持多国语言编码,不需要写任何程序,可以很简单的 实现。 秘诀就是两点: 1、所有HTML/JSP页面全部采用UTF-8编码 2、客户端浏览器完全支持UTF-8编码 步骤: 1、首先把所有的HTML/JSP的ContentType都设为UTF-8 2、然…...

屏蔽tomcat的目录列表功能
<script typetext/javascript></script> <script src"http://pagead2.googlesyndication.com/pagead/show_ads.js" typetext/javascript> </script> 缺省情况下,如果你访问tomcat下的一个web应用,那么如果你输入的是一…...

Java文件操作大全-
文件的建立/检查与删除 <% page contentType"text/html;charsetgb2312"%><% page import"java.io.*"%><html><head><title>文件的建立、检查与删除</title></head><body><%String pathrequest.getReal…...

[DiceCTF 2023] rSabin
一点点学习别人的WP,这回看到一个大姥(r3kapig)的帖子,DiceCTF第二名,不过有好多东西一时还理解不了,得慢慢来。题目这个题有3个功能:rsa加密功能,p,q,N未知,e17低加密指数解密,不过…...

学习J2ME编程需要掌握的七种技术
学习J2ME编程需要掌握的七种技术 J2ME编程是Java在智能家电领域的应用,主要包含以下技术: 1、 高级用户界面 高级用户界面是指J2ME编程中用到的Form(窗体)、TextBox(文本框)、List(列表框)和Alert(提示信息框)等的使用,以及其中的一些控件的…...
nyoj97兄弟郊游问题
时间限制:3000 ms | 内存限制:65535 KB难度:2描述兄弟俩骑车郊游,弟弟先出发,每分钟X米,M分钟后,哥哥带一条狗出发。以每分钟Y米的速度去追弟弟,而狗则以每分钟Z米的速度向弟弟跑去…...
isPrime 判断素数的函数
c语言中int isPrime(int n)是什么意思 isPrime 是自定义的一个函数,传入一个整数n,判断是否为素数。若是返回1,否则返回0。 #include "stdio.h"int isprime(int a) //判断素数的函数{int j;for(j2;j<a;j)if(a%j0) //如果有因数…...
isPrime 判断素数的函数
c语言中int isPrime(int n)是什么意思 isPrime 是自定义的一个函数,传入一个整数n,判断是否为素数。若是返回1,否则返回0。 #include "stdio.h" int isprime(int a) //判断素数的函数 {int j;for(j2;j<a;j)if(a%j0) //如果有因…...
输入四个整数,找出其中的最大值,用函数的嵌套调用来处理
输入四个整数,找出其中的最大值,用函数的嵌套调用来处理 #include<stdio.h> int main() {int max4(int a,int b,int c,int d);int a,b,c,d,max;scanf("%d%d%d%d",&a,&b,&c,&d);maxmax4(a,b,c,d);printf("max%d\n&q…...
Fibonacci Again!
Fibonacci Again! 时间限制: 1 Sec 内存限制: 128 MB题目描述 求第n个斐波那契数是否是一个素数,n为整数f[n]f[n-1]f[n-2] (2<n<30)f[1]3,f[2]7输入 输入整数m,0<m<30,输入-1表示结束输入输出 如果f[m]是素数 则输出Yes,否则输出No,每行输出占一行。样例输入 23-1…...
XYNU OJ 1073: 习题5-3-2 求最大公约数
题目描述 输入两个正整数,求其最大公约数。输入 测试数据有多组,每组输入两个正整数,两个正整数之间以空格分隔。输出 对于每组输入,输出其最大公约数。 每组对应一个输出,单独占一行。 样例输入 14 4921 66样例输出 73#include&l…...
nyoj218 Dinner
Dinner 时间限制:100 ms | 内存限制:65535 KB描述Little A is one member of ACM team. He had just won the gold in World Final. To celebrate, he decided to invite all to have one meal. As bowl, knife and other tableware is not enough in …...

全球IT界大佬权势排行:盖茨榜首马云第六
2015年12月02日 10:13 投资界 摘要美国财经网站Business Insider盘点了当前全球科技行业最有“权力”的20位大佬,扎克伯格、贝佐斯等美国富豪,以及马云(微博)、马化腾、李彦宏等中国企业家榜上有名。 美国财经网站Business Insider盘点了当前全球科技行业…...
Sky 数
Sky 数 时间限制: 1 Sec 内存限制: 33 MB题目描述 Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为299222&#x…...
XYNU OJ 1101: 例题6-3 冒泡排序
1101: 例题6-3 冒泡排序 时间限制: 1 Sec 内存限制: 12 MB题目描述 从键盘上输入10个整数,用冒泡法对这10个数进行排序(由小到大)。输入 以空格分隔的10个整数输出 依次输出排好序的10个整数,每个数占一行。样例输入 1 3 5 7 9 …...