• Ant 学习笔记


    • http://ant.apache.org/  下载zip包 ant,解压到 某个盘,比如D:apache-ant-1.9.4
    • 配置环境变量  ,bin加入path,测试是否成功,则表示配置成功。
    • 初步使用 编写简单的build.xml(默认的,Ant会自动的在当前目录下去寻找这个文件,如果找的就去构建,如果找不到就会提示:build.xml does not exist!
      1. <?xml version="1.0" encoding="utf-8"?>
      2. <project default="init">
      3. <target name="init">
      4. <mkdir dir="helloworld" />
      5. </target>
      6. </project>
      命令行 运行ant ,然后就创建helloworld文件夹 

      1. Ant没有定义自己的自定义语法;相反,它的生成文件是使用XML编写的。存在Ant能够理解的预定义XML元素,而且还可以定义新的元素来扩展Ant的功能。每个生成文件由单个project元素组成,该元素又包含一个或多个target元素。一个目标(target)是生成过程中已定义的一个步骤,它执行任意数量的操作,比如编译一组源文件。并且这些操作本身是由其他专用的任务标签执行的
      2. 顶级的project元素需要包含一个default属性,如果在Ant被调用时没有指定目标,这个属性将指定要执行的目标。然后需要使用target元素来定义该目标本身。
      3. Ant中的属性类似编程语言中的变量,它们都具有名称和值。然而与通常的变量不同,一经设置,Ant中是属性就不可更改;它们是不可变的,就像Java语言中的String对象。这起初看起来似乎很有限制性,但这样是为了遵循Ant的简单原则:毕竟,它是一个生成工具,而非一种编程语言。如果尝试给某个现有的属性赋予一个新的值,这不会看作是一个错误,但是该属性仍然会保留其现有的值
      4. 定义与使用属性
      5. <property name=”metal” value=”beryllium”/>
      6. 为了在生成文件的其他部分引用这个属性,使用以下语法:
      7. ${metal}
      8. 例如,为了使用这样一个值,它是另一个属性的值的组成部分,将标签写成下面这样
      9. <property name=”metal-database” value=”${metal}.db”/>
      10. 属性经常用于引用文件系统上的文件或目录,但是对于使用不同路径分隔符(例如,/与|的平台来说,这样可能再跨越不同平台时导致问题。Ant的location属性专门设计用于以平台无关的方式包含文件系统路径。像下面这样使用location替代value:
      11. <property name=”database-file” location=”archive/database/${metal}.db”/>
      12. 用于location属性的路径分隔字符将被转换为当前平台的正确格式;而且由于文件名是相对的,它被认为是相对于项目的基目录。我们同样可以容易地写为下面这样:
      13. <property name=”database-file” location=”archivedatabase${metal}.db”/>
      14. 这个标签的两个版本都会在不同的平台具有相同的行为
      定义依赖关系:

      生成一个项目一般需要许多步骤--例如首先要编译源代码,然后将它打包为Java归档文件(Java Archive FileJAR)。这其中许多步骤都具有清楚定义的顺序--例如,在编译器从源代码生成类文件之前,您不能打包类文件。与顺序指定target所不同的是,Ant采用一种更灵活的方法来定义依赖关系。每个目标的定义依据的是它能够执行之前必须完成的其他所有目标。这是使用target元素的depends属性来实现的

      例如:

      <target name=”init”/>

      <target name=”preprocess” depends=”init”/>

      <target name=”compile” depends=”init,preprocess”/>

      <target name=”package” depends=”compile”/>

      这种方法允许您执行项目任何阶段的生成过程;Ant会首先执行已定义的先决阶段。在上面的例子中,如果让Ant完成complie步骤,它将判断出需要首先执行init和和preprocess这两个目标。Init目标不依赖其他任何目标,因此它将首先被执行。然后Ant检查preprogress target,发现它依赖init目标;由于已经执行后者,Ant不会再次执行它,因此开始执行preprocess目标。最后可以执行compile任务本身。

      注意目标出现在生成文件中的顺序并不重要:执行顺序是由depends属性唯一确定的。


      1. <?xml version="1.0" encoding="utf-8"?>
      2. <project name="initProject" default="package" basedir=".">
      3. <property name="hello" value="hello123"/>
      4. <property name="welcome" value="welcome123"/>
      5. <target name="init">
      6. </target>
      7. <target name="preprocess" depends="init">
      8. <mkdir dir="${hello}"/>
      9. <mkdir dir="${welcome}"/>
      10. </target>
      11. <target name="compile" depends="init,preprocess"/>
      12. <target name="package" depends="compile"/>
      13. </project>
      例子,可以生成两个文件夹

    • 默认情况下,Ant寻找一个名为build.xml的文件。当然,也可以使用其他名称的生成文件,在那样的情况下,你需要对Ant使用: ant -f test.xml  (-f 是-file简写形式)
    • -D<property>=<value>   use value for given property  
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <project name="initProject" default="package" basedir=".">
    3. <property name="compile" value="complile"/>
    4. <property name="dist" value="dist"/>
    5. <target name="init">
    6. </target>
    7. <!--打包-->
    8. <target name="preprocess" depends="init">
    9. <mkdir dir="${compile}"/>
    10. <mkdir dir="${dist}"/>
    11. </target>
    12. <!--编译-->
    13. <target name="compile" depends="init,preprocess">
    14. <javac srcdir="." destdir="${compile}"></javac>
    15. </target>
    16. <!--打包-->
    17. <target name="package" depends="compile">
    18. <jar destfile="${dist}/package.jar" basedir="${compile}">
    19. <!--生成manifest文件-->
    20. <manifest>
    21. <attribute name="Built-By" value="${user.name}"/>
    22. <attribute name="Main-Class" value="test"/>
    23. </manifest>
    24. </jar>
    25. </target>
    26. </project>

    • Javac任务的一个重要的特点在于,它仅编译那些它认为需要编译的源文件。如果某个类文件已经存在,并且对应的源文件自从该类文件生成以来还没改变过,那么该源文件就不会被重新编译。
       
      Javac任务的输出显示了实际被编译的源文件的数目。
       
      这种行为刻画了Ant的许多任务的特点:如果某个任务能够确定所请求的操作不需要执行,那么该操作就会被跳过。
       
      创建JAR文件
       
      在编译Java源文件之后,结果类文件通常被打包到一个JAR文件中,这个文件类似zip归档文件,它可以指定该JAR文件的属性
       
      下面是Ant中jar任务的一个简单使用例子:
       
      <jar destfile=”package.jar” basedir=”classes”/>
       
      这将创建一个名为package.jar的jar文件,并把classes目录中所有文件添加到其中(JARwe文件能够包含任意类型的文件,而不只是类文件)。此处没有指定清单文件,因此Ant将提供一个基本的清单文件
       
      Mainifest属性允许指定一个用作JAR文件的清单的文件。清单文件的内容还可以使用mainifest任务在生成文件中指定。这个任务能够向文件系统写入一个清单文件,或者能够实际嵌套在Jar之内,以便一次性地创建清单文件和JAR文件。

      -在生成环境中使用当前时间和日期,以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这经常是可取的。这可能涉及编辑一个文件,以便插入一个字符串来指定日期和时间,或将这个信息合并到JAR或者zip文件的文件名中
       
      -这种需要是通过简单但是非常有用的tstamp任务来解决的。这个任务通常在某次生成过程开始时调用,比如在一个init目标中。这个任务不需要属性,许多情况下只需要<tstamp/>就足够了
       
      在调用tstamp任务之后,我们能够根据日期命名该JAR文件,如下所示:
       <tstamp>
          <format property="TODAY" pattern="yyyyMMdd" locale="cn" />
      </tstamp>
      <jar destfile=”package-${DSTAMP}.jar” basedir=”classes”/>  // output  package-20150411.jar


      基本操作
      创建和删除目录
       
      -最基本的文件系统操作之一就是创建目录或文件夹。做这项工作的任务名称为mkdir
       
      -<mkdir dir=”archive/metals/zinc”/>
       
      -mkdir任务的另一个有用的特性是它的如下能力:在父目录还不存在时创建它们
       
      -如果目标目录已经存在,mkdir任务不会发出错误消息,而只是假设它的工作已经完成,从而什么也不做
       
      删除目录
       
      -<delete dir=”archive/metals/zinc”/>
       
      -这将删除指定的目录连同它包含的所有文件以及子目录。使用file属性而不是dir属性可以指定要删除的单个文件


      复制移动文件目录
       
      <copy file=”src/Test.java” tofile=”src/TestCopy.java”/>
       
      还可以使用move来执行重命名操作而不是拷贝文件
       
      <move file=”src/Test.java” tofile=”src/TestCopy.java”/>
       
      另一个常用的文件系统操作是将文件复制或在移动到另一个目录
       
      <copy file=”src/Test.java” todir=”archive”/>
       
      <move file=”src/Test.java” tofile=”archive”/>
       
      默认情况下,Ant仅输出它执行的移动和复制操作的摘要,包括诸如已移动或复制的文件的数量等信息。如果想看到更详细的信息,包括涉及的文件名称等,可以将verbose属性设置为true











  • 相关阅读:
    centos7 安装nginx
    mysql
    MySQL的架构体系
    Redis实战之基础入门5种数据类型
    常用的接口限流算法
    大型分布式电商系统架构有哪些
    PHP内存管理机制
    MySQL索引查询原理
    Nginx的骚操作你知道多少?
    使用illuminate/html 提示: Call to undefined method IlluminateFoundationApplication::bindShared()
  • 原文地址:https://www.cnblogs.com/liubo6/p/4491158.html
Copyright © 2020-2023  润新知