关于Ant脚本文件

来源:互联网 发布:众途软件多少钱 编辑:程序博客网 时间:2024/05/17 08:13

Ant,全名Apache Ant,是构建Java项目要用到的工具。因为用Java语言编写,所以可以跨平台,在多个操作系统中运行。
好处是:合理的使用Ant可以大大降低项目构建、部署的难度!

构建Java项目是什么意思?什么叫构建项目?
构建就是对项目进行编译。
举例:HelloWorld这样的最简单的项目,只需要对HelloWorld这个 . Java 的源文件进行编译就可了!
但,如果是复杂的项目,就不仅仅是构建 . Java 的源文件了,项目中使用到的各种资源都需要合理的构建。
举例:有的类需要被压缩成jar归档文件、有的文件需要放到指定位置、有的时候会使用到配置文件。

//使用Ant脚本的理由
虽然,目前依靠MyEclipse及其插件可以方便的部署编译Java项目,但是,如果要部署的项目的目标机器上没有这种软件,或者,根本就不支持这种软件,这时,编译和部署就比较麻烦了。

//Ant可以做的事
不仅可以对Java源文件进行编译,还可以执行其他各种项目构建任务。如各种文件的位置之类。
使用Ant,需要编写一个构建配置文件。Ant会根据这个配置文件执行对应的操作。
如,指定部署配置过程中的各种动作,配置各种动作之间的依赖关系。

因此,只要在配置文件中,把项目构建的要求说明清楚,就可以使用Ant对项目进行构建、部署。

一、Ant也是需要安装配置的

      在Ant官方网站下载最新版本,无需安装,直接解压,再配置环境变量即可!
      (1) 新建用户变量,注意是用户变量,不是系统变量。
              ANT_HOME        C:\apache-ant-版本号 // 这个路径是Ant文件解压放置的路径
      (2)系统变量的Path变量中,添加,在前面添加:C:\apache-ant-版本号\bin;   
              //注意环境变量基本都  是反斜杠\
      (3)配置结束,检测是否安装成功。cmd-输入ant。若跳出Buildfile 。。。界面,说明安装配置成功了!

二、从HelloWorld开始讲起
  
      HelloWorld工程中,有一个src文件夹,用来放置工程中的源代码,该工程中只有一个HelloWorld.java 的   文件。
  
     没有使用Ant之前,让我们先用手工的方式对该工程进行构建。
   
     构建工程是什么意思呢?
     就是编译、打包、运行、部署等操作。HelloWorld没有部署这个步骤。
    构建HelloWorld工程需要以下几个步骤:
    1. 准备工作
        创建build/classes 目录,用来放置编译成功的类文件
        创建build/lib        目录,用来放置生成或是引用到的jar包(jar包还会生成?)
        此时,HelloWorld工程的根目录中有两个文件夹,src和build,build文件夹中又有classes和lib两个文件夹。
    2. 编译工程
       在没有使用辅助工具时,只有在DOS命令行中对Java文件进行编译。
       比如:HelloWorld的工程位置在C:\HelloWorld 。
       DOS命令行编译:
       把路径切换到工程目录,cd C:\   
                                                    cd HelloWorld
       调用javac编译源文件,javac-sourcepath src -d build\classes src\HelloWorld.java
                                     // -sourcepath src指明在src文件夹中寻找要编译的Java文件
                                         -d                     
指明把生成的class文件放在build/classes目录中
    3.生成jar文件
       在绝大部分的Java开源项目中,都会把类文件打包成jar文件,从而方便用户的使用。
       下面我们把HelloWorld这个工程中的类文件打包成jar文件。
       C:\>cd HelloWorld
       C:\HelloWorld>echoMain-Class:HelloWorld>Manifest  //生成一个Manifest文件,且指明Main-Class为HelloWorld
       C:\HelloWorld>md build\lib  //创建了一个目录,可以把生成的jar文件放在lib目录
       C:\HelloWorld>jar cfmbuild\lib\HelloWorld.jar Manifest -C build\classes,  //注意这一句的最后有个逗号, 根据清单文件,把class目录中的类文件打包成jar文件,并把生成的jar文件放在build\lib 目录下,生成的jar文件名为Hello World.jar
       在打包生成jar文件时,需要提供Manifest清单文件,在这个文件中可以配置Main-Class(这里是HelloWorld),
       即!包含有main方法的类,作为调用执行这个jar包的程序入口,
       在这个文件中同时可以配置引用到其他类库和包的信息。
     4.运行工程
        运行方法有两种供选择。
        第一种,直接执行编译得到的Java类。
        方法是:cd C:\
                    cd  HelloWorld
                    java -cp build\classes HelloWorld  //意思是,在build\classes目录中,找到并执行HelloWorld这个类文件
                    Hello world!
          调用了java命令,其中参数cp的意思是指明在寻找HelloWorld类文件的路径位置。
         
        第二种,在DOS命令行中执行jar文件。
        方法是:cd C:\
                    cd  HelloWorld
                    java -jar build\lib\HelloWorld.jar
                    Hello world!
            这种方法,直接调用并执行jar包中的类文件,因为在上面生成HelloWorld.jar的过程中,我们已经在Manifest文件中指定了 HelloWorld为Main-Class,所以在执行这个jar包的时候,会自动找到HelloWorld这个类,并执行。

到这里,我们完成了HelloWorld这个工程的构建和运行的所有任务,可以感觉到,这个过程是相当麻烦的,这只是一个简单的HelloWorld,如果是复杂的工程,将更加麻烦,会有更大的工作量。
所以,我们有必要寻找一种简单灵活易用的构建工程的工具,接下来,我们使用Ant来完成这个任务。
(现在回想一下,如果使用Eclipse来编写编译Java工程,以上建立的一些文件夹和文件,都帮我们自动在工程根目录创建了,结果的显示也很方便的能够查看,这就是构建工具的方便性,现在体验一下Ant脚本是怎么用的)

三、使用Ant分步构建HelloWorld工程
       Ant在构建工程的时候,只需要一个简单的脚本,在这个脚本中,
       我们描述构建任务,然后就可以根据这个构建描述文件,完成构建工程的任务。
      
       在Ant中,这个文件默认名称为build.xml
       对HelloWorld这个工程来说,描述文件书写如下:
       //Ant 脚本是用XML描述的,这行代码是所有XML文档都必须指明的头信息。指定XML的版本,以及这个XML文档的字符编码格式
       <?xml version="1.0"encoding="UTF-8"?>
       //Ant脚本中,必须包含project节点,这个节点是整个XML文档的根节点,
          name
是工程的名称,default代表默认要做的事,basedir是工作的根目录,“.”代表是当前目录
       <project name="HelloWorld"default="run" basedir=".">
              //定义了一个名为src的属性,这个属性的值是src,在整个XML文档中,都可以使用${src}的形式来调用这个属性的值
             //
Ant中,property相当于定义了一个变量
             <property name="src" value="src"/>
             <property name="dest" value="build/classes"/>
             <property name="lib" value="build/lib"/>
             <property name="hello_jar"value="build/lib/hello.jar">
              //定义了任务,任务的名称是init,要处理的内容是创建一个目录,目录的值为属性dest的值,也就是建立一个目录,build/classes
             <target name="init">
                    <mkdir dir="${dest}"/>
                    <mkdir dir="${lib}"/>
              </target>
              <target name="compile">
                     <javac srcdir="${src}" destdir="${dest}"/>
              </target>
              <target name="build">
                     <jar destfile="${hello_jar}" basedir="${dest}">
                             <manifest>
                                   <attribute name="Main-Class" value="HelloWorld">
                              </manifest>
                     </jar>
                </target>
                 <target name="run">
                        <java classname="HelloWorld" classpath="${hello_jar}"/>
                 </target>
                 <target name="clean">
                        <delete file="${hello_jar}"/>
                        <delete dir="${dest}"/>
                        <delete dir="${lib}">
                   </target>
          </project>
 
      在一个脚本中,可以有多个target,在Ant中可以根据名称执行对应的任务。
      在HelloWorld这个Ant构建脚本中,定义了5个构建任务,
      init的动作是执行工程
      compile的动作是编译
      build的动作是生成jar文件
      run的动作是执行工程
      clean的动作是清除构建动作生成的文件及目录
      这些动作都可以根据名称调用
把上面这个build.xml脚本文件放在HelloWorld的工程根目录下,就可以使用这个Ant脚本来构建HelloWorld这个工程,这个时候HelloWorld的工程目录结构就是一个src文件夹,一个build.xml的脚本文件

写完Ant脚本,开始构建的步骤如下:
1. 提前创建需要用到的文件夹和目录,init的target完成的就是这个任务
    所以在ant中调用这个任务即可
 
    C:\HelloWorld>ant init
    Buildfile:build.xml

    init:
    [mkdir] Created dir:   C:\HelloWorld\build\classes
    [mkdir] Created dir:   C:\HelloWorld\build\lib

   BUILD SUCCESSFUL
  
   只需要把当前路径切换到HelloWorld的工程目录下,然后输入 ant init 就可了!
   这样就完成了构建项目的准备工作。
2. 编译工程
    C:\HelloWorld>ant compile
   
Ant会把指定目录中的源文件全部编译,并把编译得到的类文件放在build\classes目录下。
3.
生成jar文件
   C:\HelloWorld>
antbuild
   会在build\lib目录中生成项目对应的jar文件。可以直接运行调用这个jar文件运行HelloWorld这个工程。
4.
运行工程
   C:\HelloWorld>
ant run
  
通过run这个target完成工程的运行

由此可见,使用Ant明显要方便很多

四、自动构建HelloWorld工程
上面我们使用Ant分步对HelloWorld工程进行构建,接下来我们使用AntHelloWorld这个工程进行自动构建。
在这里我们使用下面这个构建文件。


       <?xml version="1.0"encoding="UTF-8"?>
    
       <project name="HelloWorld" default="run" basedir=".">
             
             <property name="src" value="src"/>
             <property name="dest" value="build/classes"/>
             <property name="lib" value="build/lib"/>
             <property name="hello_jar" value="build/lib/hello.jar">
          
             <target name="init">
                    <mkdir dir="${dest}"/>
                    <mkdir dir="${lib}"/>
              </target>
              <target name="compile"depends="init">
                     <javac srcdir="${src}" destdir="${dest}"/>
              </target>
              <target name="build"depends="compile">
                     <jar destfile="${hello_jar}" basedir="${dest}">
                             <manifest>
                                   <attribute name="Main-Class" value="HelloWorld">
                              </manifest>
                     </jar>
                </target>
                 <target name="run"depends="build">
                        <java classname="HelloWorld" classpath="${hello_jar}"/>
                 </target>
                 <target name="clean">
                        <delete file="${hello_jar}"/>
                        <delete dir="${dest}"/>
                        <delete dir="${lib}">
                   </target>
          </project>
在这个Ant脚本中,我们定义了各个target之间的依赖关系,我们根据依赖关系就可以知道,执行的顺序是:
init--->compile--->build--->run--->clean

在调用ant的时候,先将工作路径切换到HelloWorld的工程目录,然后直接执行ant即可
C:\HelloWorld>ant

在没有指明执行哪个target的时候,直接调用project中default指明的默认target。
在这里,默认target是run,然后ant检测到执行run之前要执行build,执行build之前要执行compile,以此类推,可以检测到第一个target,从而开始执行整个ant脚本。
init--->compile--->build--->run--->clean

这样,只需要执行ant这个命令就可以完成整个HelloWorld工程的构建任务,从准备工作到编译打包执行,这些只需要一个指令就可以完成了。
完成以后,HelloWorld的工程目录结构为三部分:src文件夹、build.xml 脚本文件、build文件夹


五、Ant构建文件解析
Properties:
在Ant脚本中,property相当于定义了一个变量。这个变量在整个ant脚本中都可以使用。
<property name="src" value="src"/>
我们还可以取出Ant内置的属性和系统变量的属性。
<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="run"basedir=".">
<target name="prop">
     <echo message="${basedir}"/>
     <echo message="${ant.version}"/>
     <echo message="${ant.file}"/>
     <echo message="${ant.project.name}"/>
     <echo message="${ant.java.version}"/>
     <echo message="${os.name}"/>
//上面这段代码输出了几个Ant的内部属性,其中
basedir
是在Ant脚本中定义的工作根目录
ant.version
Ant的版本
ant.file
是使用的Ant脚本文件
ant.project.name
Ant脚本定义的project名称
ant.java.version
Ant使用的JDK版本
这些都是Ant的内置属性,所以无需定义,直接就可以使用
     <property environment="env"/>
     <echo message="${env.JAVA_HOME}"/>
     <echo message="${env.TOMCAT_HOME}"/>
//Ant中同样可以访问系统的环境变量
使用系统环境变量时,首先要获取所有的环境变量<property environment="env"/>,并放在env
在下面的程序中,使用${env.变量名称}来取对应的环境变量的值

</target>
</project>

Classpath:
在Java程序的开发和部署过程中,经常遇到的问题就是classpath的设置问题。
例如在程序中要使用到第三方的类库,那么在使用Ant构建这个工程的时候,必须指明这个第三方类库的classpath,否则工程的编译工作就不能通过。
<classpath id="project.class.path">
          <pathelementpath="${classpath}"/>
          <filesetdir="lib">
                <include name="**/*.jar"/>
           </fileset>
           <pathelementlocation="build/classes"/>
</classpath>
//上面这段代码定义了一个idproject.class.pathclasspath
首先使用了classpath的嵌套元素,
然后把lib文件夹下的所有jar包路径添加到classpath
最后把classes目录的路径加入classpath
其中location属性制定了相对于project基目录的一个文件和目录,而path属性接受逗号或分号分隔的一个位置列表。
下面说明Classpath的使用方法。
例如在HelloWorld这个工程中,我们新增一个数据库访问的类,具体代码如下。
import java.sql.*;
public class HelloWorld{
public static void main(String[] args){
String className="com.microsoft.jdbc.sqlserver.SQLServerDriver";
Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
String name="sa";
String password="123456";
Connection conn=null;
try{
Class.forName(className);
conn=DriverManager.getConnection(url,name,password);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
System.out.println("取得的数据库连接为:"+conn);
}
}
我们修改了HelloWorld的代码,在这个类中,我们增加了数据库连接的内容。
如果不修改Ant脚本,编译不会通过。
因为在这个脚本中,没有指明数据库驱动类的位置,在连接数据库的时候找不到数据库驱动类。

针对这种情况,就需要在运行工程的时候,设置所需的classpath,注明使用到的第三方类
在这里,需要把用到的数据库驱动类文件:msbase.jar、mssqlserver.jar、msutil.jar放在HelloWorld根目录下的lib文件夹中,然后按照下面的方法修改build.xml文件中的run的target。



Ant脚本的编写不着急,暂告一段落。
停在蓝皮书---311页!

 

0 0
原创粉丝点击