ant入门示例--mybatis学习笔记之预备篇

在这里首先和大家分享一下笔者学习新技术的一点心得。每一项技术都会涉及到很多的知识点,这很容易对初学者造成较大的心理压力。如果刚开始把目标定得过高,写较复杂的程序的话,会有一个很大的坏处:因为是初学,基础知识掌握得并不牢固,也缺乏经验,犯错误的几率更大。那么此时这个不牢固的基础知识以及经验的匮乏,自然会给排错增加很大的困难,因为你有太多的不确定。这不但耽误时间,而且对自信心也是一个打击,至少会加剧自己的心理压力。然而,如果只是用它写一个较小的程序的话,实际上只会用到其中很小一部分的知识。这样出错后(这是不可避免的),不确定的地方也较少,排错也容易。因此,笔者的做法通常是先写出一个简单的程序,通过这个过程,先牢固掌握最基本的知识并开始积累经验。然后,再以此为基础,逐渐扩大编写程序的复杂度(这样跨度小)。这样出错后,由于先前的知识和经验的积累,以及较小的跨度,排错的难度自然大大降低。这样就可以减轻心理压力,逐渐树立自信,比较容易地逐步掌握越来越多的知识。因此,本文以及后续的博文都会贯彻同一条原则:从最简单的开始,逐渐增加复杂度。本文就先介绍如何编写一个简单的ant工程,以后mybatis的学习笔记,都用ant来组织工程。
存放ant工程所有的文件需要一个目录,笔者在自己机器上的E:\DemoPrograms下新建一个目录AntDemo,用来创建本文的ant工程,其他所有的目录都以此目录为基准。在此目录下需要有三个子目录,它们是src、lib和classes,其作用分别如下:
1. src:存放源代码文件和工程所需的配置文件;
2. lib:工程用到的jar包;
3. classes:编译后的.class文件被输出到此目录,工程所需的配置文件也会被复制到此目录下(在后面我们可以看到,实际上这个目录我们可以让ant帮我们创建)。
本示例将创建一个User对象,并把它以JSON字符串的形式输出(有关JSON的知识,读者可参考www.2cto.com)。程序非常简单,纯属示例。User类是一个简单的JAVA Bean,代码如下:
1. package com.abc.people;
2.
3. public class User {
4.
5. private int id;
6. private String name;
7. private int age;
8. private String gender;
9.
10. public int getId() {
11. return id;
12. }
13.
14. public void setId(int id) {
15. this.id = id;
16. }
17.
18.
19. public String getName() {
20. return name;
21. }
22.
23. public void setName(String name) {
24. this.name = name;
25. }
26.
27. public int getAge() {
28. return age;
29. }
30.
31. public void setAge(int age) {
32. this.age = age;
33. }
34.
35. public String getGender()
36. {
37. return gender;
38. }
39.
40. public void setGender(String gender)
41. {
42. this.gender = gender;
43. }
44.
45. }
依据此类的package声明,在src下创建子目录com\abc\people(包的层次与与目录层次一一对应),把User.java文件存放在此目录下。然后是创建User对象并转换为JSON字符串的程序,在这里是AntDemo类,代码如下:
1. package com.demo;
2.
3. import com.abc.people.User;
4. import net.sf.json.JSONObject;
5.
6. public class AntDemo
7. {
8.
9. public static void main(String[] args)
10. {
11. User user = new User();
12. user.setId(10);
13. user.setName("General Patton");
14. user.setAge(60);
15. user.setGender("male");
16.
17. //创建一个JSONObject对象
18. JSONObject json = JSONObject.fromObject(user);
19.
20. //以JSON字符串的形式打印
21. System.out.println(json.toString());
22. }
23.
24. }
与User.java类似,我们根据AntDemo所在的包,在src目录下创建目录com\demo,用来存放AntDemo.java文件。本示例需要用到的jar包如下:commons-beanutils-1.8.3.jar,commons-collections-3.2.1.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,json-lib-2.4-jdk15.jar。自然,我们需要把这些jar包复制到lib目录下。
接下来需要做的,就是创建ant工程的核心所在,编写生成文件。生成文件默认名为build.xml,一般存放在工程的顶级目录中,在本示例中就是在AntDemo下。生成文件包含一个project元素,它是顶级元素,代表一个工程。project元素至少一个target元素,而每个target元素又包含一个到多个task元素。执行ant,就是执行这些target元素;而执行每个target元素,就是依次执行它所包含的task元素。本工程的build.xml文件如下:
1. <?xml version="1.0" encoding="ISO-8859-1"?>
2. <!--project元素。name属性指定工程的名称,default属性
3. 指定ant默认执行的target,即不指定要执行的target时,ant
4. 执行的target。basedir指定本工程的基准目录,这里指定为
5. 当前目录。-->
6. <project name="AntDemo" default="compile" basedir=".">
7.
8. <!--property元素,定义了两个元素,供后面以${元素名}的形式引用。-->
9. <property name="targetdir" value="classes"/>
10. <property name="srcdir" value="src"/>
11.
12. <!--定义一个path元素,指定id属性,供后面引用-->
13. <path id="library">
14. <!--定义一个fileset元素,用于指定需要用到的文件。dir属性指定哪个目录下的文件。-->
15. <fileset dir="lib">
16. <!--指定包含lib目录下的所有jar包-->
17. <include name="*.jar" />
18. </fileset>
19. </path>
20.
21. <!--定义一个target元素,name属性为必须,用于标识此target。description属性用于描述此target,无太大意义。depends属性指定执行此target,所依赖的其他target。这里指定为了运行compile这个target,需首先执行clean,copy-resources这两个target。-->
22. <target name="compile" description="Compiles the Task" depends="clean">
23. <!--javac是ant的核心任务(task),用于编译JAVA源程序。srcdir属性指定源程序所在的目录,${srcdir}表明引用上面定义的名为srcdir的property元素的值。destdir指定编译后生成的.class文件的输出目录。同样地,这里使用了${targetdir}的形式引用了上面定义的名为targetdir的property元素的值。classpathref表明引用上面定义的id为library的path元素。在这里,即可把它包含的.jar包加载到classpath中,而不需要像笔者以前那样自己手动运行setclasspath命令。-->
24. <javac srcdir="${srcdir}" destdir="${targetdir}"
25. classpathref="library" includeantruntime="no"/>
26. </target>
27.
28. <!--定义一个名为clean的target。-->
29. <target name="clean">
30. <!--delete是ant的一个核心任务,用于删除目录或文
31. 件。这里用来删除classes目录。即先把以前创建的classes目录删除,免得旧文件造成干扰-->
32. <delete dir="${targetdir}" />
33. <!--mkdir也是一核心任务,用于创建目录。这里用来
34. 新创建classes目录-->
35. <mkdir dir="${targetdir}" />
36. </target>
37.
38. <target name="copy-resources">
39. <!--copy也是ant的一个核心任务,用于复制目录或文
40. 件。todir指定复制的目标目录。本示例未使用此任务-->
41. <copy todir="${targetdir}">
42. <!--fileset元素指定要复制的文件集,dir属性指定复制的源目录,exclude元素指定排除此目录下的所有java源文件,即复制除这些文件之外的所有文件-->
43. <fileset dir="${srcdir}">
44. <exclude name="**/*.java"/>
45. </fileset>
46. </copy>
47. </target>
48.
49. <!--depends属性指定运行此target应先运行名为compile的target-->
50. <target name="run" depends="compile">
51. <!--java是ant的核心任务,用于执行某个java类。classname属性用于指定要运行的类,这里要用到类的全名fork设为true表明使用另外的JVM来运行我们的JAVA类,而不是使用运行ant的那个JVM。classpathref与上面的javac里的一样-->
52. <java fork="true" classname="com.demo.AntDemo" classpathref="library">
53. <!--将classes目录加载到classpath中-->
54. <classpath path="${targetdir}"/>
55. </java>
56. </target>
57. </project>
打开命令行窗口,进入到E:\DemoPrograms\AntDemo目录下。若直接执行ant命令,ant将在当前目录下搜寻build.xml文件(这是默认情况),并根据project元素的default值,执行compile这个target。若想运行run这个target,则执行命令:ant run。这里我们来分析一下执行这个target的流程:在run这个target中,depends属性指定应先运行compile这个target;而compile又指定应先运行clean这个target。因此,整个流程是:先运行clean,把旧的classes目录删除,避免它包含的旧文件造成干扰;然后创建一个全新的classes目录;然后运行compile target,编译源程序并将.class文件输出到classes目录中;最后运行run target,执行编译好的程序。当然,在编译和执行程序的时候,ant都根据classpath和classpathref等的值,帮我们把相应的jar包和classes目录加载到了classpath中。执行过程如下图所示:

ant入门示例--mybatis学习笔记之预备篇

而下图则表明ant在调用本机的java编译器时,使用了-classpath参数,从而把我们的jar包加载进了classpath中。
ant入门示例--mybatis学习笔记之预备篇

作者:肖凡
分类:默认分类 时间:2015-02-27 人气:1
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.097 (s). 10 q(s)