关于Ant脚本文件
2015-08-21 17:45
330 查看
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工程进行构建,接下来我们使用Ant对HelloWorld这个工程进行自动构建。
在这里我们使用下面这个构建文件。
<?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>
//上面这段代码定义了一个id为project.class.path的classpath
首先使用了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页!
好处是:合理的使用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工程进行构建,接下来我们使用Ant对HelloWorld这个工程进行自动构建。
在这里我们使用下面这个构建文件。
<?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>
//上面这段代码定义了一个id为project.class.path的classpath
首先使用了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页!
相关文章推荐
- Java Mail 邮件发送Demo
- C语言回车符号和换行符
- 线程同步互斥之信号量对象(Semaphore)
- NSFileManager管理文件常用办法
- 同步代码块,同步方法,同步静态方法,同步非静态方法的区别
- 由于协议错误,回话将被中断。请重新连接到远程计算机。
- ios UI开发相关转载链接汇总
- CF 219 D Choosing Capital for Treeland(树形dp)
- php:内存回收机制
- 新安装的wampserver怎么使用本机已有的mysql作为数据库
- c查找算法——线性索引查找
- 目前为止存在的这些问题
- python 打开文件,写入文件,关闭文件,读文件,清空文件内容
- Java基础——成员变量、局部变量和静态变量的区别
- 二进制-十进制-十六进制-含义解释
- JQuery插件开发之如何实时显示被隐藏的输入框密码
- SSH整合之架构的历史---用户注册
- [hive]Can't create/write to file '/tmp/#sql_2290_0.MYI' (Errcode: 13)
- 排序算法性能及选择总结
- Dmidecode命令详解