Ant入门基础

一、 Ant 介绍

         Ant是构建工具,用来实现软件的自动化的构建,类似于VisualStudio的project文件,Linux上构建C++的makefile,Ant通常用来构建Java程序。

        Ant是基于XML的文件,所以更容易阅读;Ant是用Java实现的,本身支持跨平台;Ant基于插件的方式开发,本身内置了常用的大部分的插件,而且第三方的扩展也很容易;Ant除了用来构建Java程序,也可以用来构建其他的任何程序,例如C++等。

        和Ant类似,能够支持跨平台的其他的一些非常优秀的构建工具有Maven,Scons,CMake等。


二、Ant的配置

        1、安装jdk,并设置
        JAVA_HOME=D:\Java\Jdk1.5

        classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

        path=%JAVA_HOME%\bin;%path%

        2、下载安装Ant,并设置

        ANT_HOME=E:\Lab\apache-ant-1.8.2

        path=E:\Lab\apache-ant-1.8.2\bin

        3、最后验证是否安装成功在dos中输入ant,如果显示:

        Buildfile: build.xml does not exist!

        Build failed

则安装成功。


三、Ant的基础元素

        1、Project元素

        Project元素是Ant文件的根元素,Ant构建文件中至少应该包含一个project元素,否则会发生错误。在每个project元素下面可以包含多个target元素。

        project的属性包括:

                name : 项目名称

                default:当调用时没有指定target时,此project的默认target

                basedir:用于指定基路径的位置,当属性没有指定时,使用Ant的构建文件的父目录作为基路径。

例如:

<?xml version="1.0" ?>
    <project name ="antPro" default ="getBaseDir" basedir ="C:/ThinkInJavaCode">
    <target name="getBaseDir">
        <echo message="The base dir is: ${basedir}"/>
    </target>
< /project>

        从上例可以看出,在这里定义了default 属性的值为getBaseDir ,即当运行ant 命令时,如果没有指明待执行的target,则将执行默认的target--getBaseDir 。此外,还定义了basedir 属性的值为 "C:/ThinkInJavaCode" ,进入"C:/ThinkInJavaCode" 后运行ant 命令,得一下结果:
        Buildfile: C:\ThinkInJavaCode\build.xml

        sayBaseDir:

        [echo] The base dir is: C:\ThinkInJavaCode

        BUILD SUCCESSFUL

        Total time: 0 seconds


        2、target元素

        target为Ant的基本执行单元,他可以包含一个或多个具体的任务。

        target的属性有:

                name: target的名称,这个属性在一个project中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。

                depends:用来描述target间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target 。被依赖的 target 会先执行。

                if:用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行。

                unless:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。

                description:该属性是关于 target 功能的简短描述和说明。

       多个target可以存在相互依赖的关系。Ant会依照depends属性中target出现的顺序依次执行每个target。然而,要记住的是只要某个target依赖于另一个target,后者就会被先执行。

<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
        假定我们要执行target D。从它的依赖属性来看,你可能认为先执行C,然后B,最后A被执行。错了,C依赖于B,B依赖于A,所以先执行A,然后B,然后C,最后D被执行。

        一个target只能被执行一次,即时有多个target依赖于它。


        3、property元素

        property元素可看作变量或者参数的定义(即经常使用的变量),project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。例如<property name ="name" value ="philander"/>。若要在外部引入某文件,例如 build.properties 文件,可以通过<property file=” build.properties”/>将其引入。

        Ant 提供了一些内置的属性,它能得到的系统属性的列表与 Java 文档中 System.getPropertis() 方法得到的属性一致,这些系统属性可参考 sun 网站的说明。同时, Ant 还提供了一些它自己的内置属性,如下:

        basedir:project 基目录的绝对路径;

        ant.file:buildfile的绝对路径,上例中ant.file值为C:\ThinkInJavaCode\build.xml;

        ant.version:Ant 的版本信息,本文为1.8.1 ;

        ant.project.name:当前指定的project的名字,即前文说到的project的name属性值;

        ant.java.version:Ant 检测到的JDK版本,本文为 1.5 。

举例:

<? xml version="1.0" ?>
    <project name ="propertyPro" default ="example">
    <property name ="name" value ="philander"/>
    <property name ="age" value ="25"/>
    <target name ="example">
        <echo message ="name: ${name}, age: ${age}"/>
    </target>
</project>

        上例中用户设置了名为name 和age的两个属性,这两个属性设置后,在下文中可以通过 ${name} 和 ${age} 分别取得这两个属性值。


四、 ANT常用命令

        1. copy 命令

        copy主要用来对文件和目录的复制功能。举例如下:

        eg1. 复制单个文件:

            <copy file="original.txt" tofile="copied.txt"/>

        eg2. 对文件目录进行复制:

            <copy todir="../dest_dir">

                <fileset dir="src_dir"/>
            </copy>

        eg3. 将文件复制到另外的目录:

            <copy file="source.txt" todir="../home/philander"/>


        2. delete 命令

        对文件或目录进行删除,举例如下:

        eg1. 删除某个文件:

            <delete file="/home/photos/philander.jpg"/>

        eg2. 删除某个目录:

            <delete dir="/home/photos"/>

        eg3. 删除所有的备份目录或空目录:

            <delete includeEmptyDirs="true">

               <fileset dir="." includes="**/*.bak"/>

            </delete>


        3. mkdir 命令

        创建目录。 

        eg :

        <mkdir dir="/home/philander/build/classes"/>


        4. move 命令

        移动文件或目录,举例如下:

        eg1. 移动单个文件:

            <move file="sourcefile" tofile=”destfile”/>

        eg2. 移动单个文件到另一个目录:

            <move file="sourcefile" todir=”movedir”/>

        eg3. 移动某个目录到另一个目录:

            <move todir="newdir"> 

                <fileset dir="olddir"/>

            </move>


        5. echo 命令

        该任务的作用是根据日志或监控器的级别输出信息。它包括 message 、 file 、 append 和 level 四个属性,举例如下:

        <echo message="Hello,ANT" file="/home/philander/logs/ant.log" append="true">


五、利用ant 构建和部署Java项目

      Ant 可以代替使用 javac 、 java 和 jar 等命令来执行 java 操作,从而达到轻松的构建和部署 Java 项目的目的。

        1. 利用ant 的javac命令来编译Java程序

        Ant 的javac命令用于实现编译Java 程序的功能。

        下面来看一个简单的例子:首先我们建立名为 JavaTestPro的Java项目,建立src目录为源代码目录,在src目录下建立HelloWorld.java这个类文件。

该类文件的内容如下:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("hello world!");
    }
}
        同时在JavaTestPro项目的根目录下建立build.xml 文件,在该文件中编译src 目录下的Java文件,并将编译后的class文件放入build/classes 目录中,整个项目的目录结构如下:

|JavaTestPro

    |src

    |build

        |classes

    |build.xml

在编译前,需清除classes 目录,该文件的内容如下:

<?xml version="1.0" ?> 
    <project name ="JavaTestPro" default="compile" basedir=".">
    <target name="clean">
        <delete dir="${basedir}/build"/>
    </target>
    <target name="compile" depends ="clean">
        <mkdir dir ="${basedir}/build/classes"/>
        <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/>
    </target>
</project>
        在项目根目录(C:\ThinkInJavaCode\JavaTestPro)执行ant命令后,可在该目录下发现新生成的build/classes子目录,编译后生成的HelloWorld.class文件就在该目录下。


        2. 使用java命令执行Java程序

        Ant 中可以使用 java命令实现运行Java程序的功能。可以在上面的build.xml基础上做修改来实现:

<?xml version="1.0" ?>
    <project name ="JavaTestPro" default="run" basedir=".">
    <target name="clean">
        <delete dir="${basedir}/build"/>
    </target>
    <target name="compile" depends ="clean">
        <mkdir dir ="${basedir}/build/classes"/>
        <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/>
    </target>
    <target name="run" depends ="compile">
        <java classname ="HelloWorld">
            <classpath>
                <pathelement path="${basedir}/build/classes"/>
            </classpath>
        </java>
    </target>
</project>
接着,就可以在控制台看见输出:"[java] hello world!"


        3. 使用jar命令生成jar文件

        还可以在上例的基础上更进一步,来生成jar包,可在run 这个 target 下再加上如下 target :

<?xml version="1.0" ?>
    <project name ="JavaTestPro" default="jar" basedir=".">
    <target name="clean">
        <delete dir="${basedir}/build"/>
    </target>
    <target name="compile" depends ="clean">
        <mkdir dir ="${basedir}/build/classes"/>
        <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/>
    </target>
    <target name="run" depends="compile">
        <java classname ="HelloWorld">
            <classpath>
                <pathelement path="${basedir}/build/classes"/>
            </classpath>
        </java>
    </target>
    <target name="jar" depends="run">
        <jar destfile="helloworld.jar" basedir="${basedir}/build/classes">
            <manifest>
                <attribute name="Main-class" value="HelloWorld"/>
            </manifest>
        </jar>
    </target>
</project>
        其中,project的default 属性设置为应设为jar,ant运行完毕后,可看到在项目的根目录下生成了一个 helloworld.jar的jar包 。可通过运行以下命令来执行该jar包:

        java -jar helloworld.jar


        4. 使用war命令打包JavaEE项目

        建立一个名为WebTest的JavaEE项目,其中src 为Java源代码目录,WebContent为各jsp存放目录,lib 为项目引用的的包的目录。在WebTest项目目录下建立了build.xml 文件,该文件为该工程的 Ant 构件文件。

|WebTest

    |src

    |build

        |classes

    |WebContent

        |META-INF

            |MANIFEST.MF

        |WEB-INF

            |lib

            |classes

        |HelloJSP.jsp

    |build.xml

        读者可以 在src 目录下放入在前续例子中开发的 HelloWorld.java 文件,并在 WebContent下建立 HelloJSP.jsp 文件,其内容很简单,就是输出 Hello 信息,代码如下所示如下

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>war test for ant</title>
    </head>
    <body>
        Hello JSP!Hello Ant!
    </body>
</html>

接下来编写 build.xml 文件,其内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
    <project name ="WebTest" default ="war" basedir =".">
    <property name ="classes" value ="${basedir}/build/classes"/>
    <property name ="build" value ="${basedir}/build"/>
    <property name ="lib" value ="${basedir}/WebContent/WEB-INF/lib"/>
    <!-- 删除build 路径-->
    <target name ="clean">
        <delete dir ="${build}"/>
    </target>
    <!-- 建立build/classes 路径,并编译class 文件到build/classes 路径下-->
    <target name ="compile" depends ="clean">
        <mkdir dir ="${classes}"/>
        <javac srcdir ="${basedir}/src" destdir ="${classes}"/>
    </target>
    <!-- 打war 包-->
    <target name ="war" depends ="compile">
        <war destfile ="${build}/WebTest.war" webxml ="${basedir}/WebContent/WEB-INF/web.xml">
            <!-- 拷贝WebRoot 下除了WEB-INF 和META-INF 的两个文件夹-->
            <fileset dir ="${basedir}/WebContent" includes ="**/*.jsp"/>
            <!-- 拷贝lib 目录下的jar 包-->
            <lib dir ="${lib}"/>
            <!-- 拷贝build/classes 下的class 文件-->
            <classes dir ="${classes}"/>
        </war>
    </target>
</project>
        在C:\ThinkInJavaCode\WebTest目录下运行ant后,就生成了WebTest.war 文件了,然后可以将其放入Web容器(如Tomcat)的相应目录下(${Tomcata安装目录}\webapps)运行该web项目了。


转自:http://blog.csdn.net/denniswlin/article/details/6934693

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值