Ant学习笔记

  前言:这段时间在学习Ant,发现这是一个很强大的构建工具。你可能使用了很长一段时间,才发现Ant能做数不完的事。总之,个人觉得,Ant学习门槛低,入门简单,能大概看懂程序,写一些简单的脚本即可,剩下在遇到的时候边做边学就可以了。另外,博主资历尚浅,有说的不对的地方,还请大家不吝指教。

1、Ant是一个Apache基金会下的跨平台的构建工具,它可以实现项目的自动构建和部署等功能。它具有跨平台、使用简单、语法清晰、功能强大等特点

2、下载和安装:http://ant.apache.org/,添加环境变量ANT_HOME,指向根目录D:\hybirs630\hybris\bin\platform\apache-ant-1.9.1、安装完成后,进入控制台界面,输入 ant -version检查是否安装成功。

3、Ant的构建文件是通过XML编写的,默认名称是build.xml.

<?xml version="1.0"?>
<project name="helloWorld">
       <target name="sayHelloWorld">
              <echo message="Hello,Amigo"/>
       </target>
</project>

备注:(在文件的存在目录执行ant sayHelloWorld, ant 默认寻找文件build.xml,若文件不为build.xml,则执行ant –f hello.xml sayHelloWorld、ant –buildfile hello.xml sayHelloWorld或ant –file hello.xml sayHelloWorld)

4、Ant的关键元素project、target、property、task

      1、project元素(至少包含一个,可以包含多个target)  、 name属性、 default属性(用于指定project默认执行时所执行的target的名称)、basedir属性(用于指定路径的位置。没有指定,使用Ant的构件文件的附目录作为基准目录)

<?xml version="1.0"?>
<project name="projectStudy" default="sayBaseDir" basedir="D:\hybirs630\hybris\bin\platform\apache-ant-1.9.1">
       <target name="sayBaseDir">
              <echo message="The base dir is: ${basedir}"/>
       </target>
</project>

2、ant -projecthelp(列出当前ant可执行的所有命令)

3、target元素(是Ant的基本执行单元,它可以包含一个或多个具体的任务,多个target可以存在相互依赖关系)、name属性(指定名称)、depends属性(描述target之间的依赖关系,以,间隔,顺序执行,被依赖的target优先执行)、if/unless属性(验证属性是否存在,若存在,则执行/不执行)、description属性(target功能的简短描述与说明)

<?xml version="1.0"?>
<project name="targetStudy">
       <target name="targetA" if="ant.java.version">
              <echo message="Java Version: ${ant.java.version}"/>
       </target>
       <target name="targetB" depends="targetA" unless="amigo">
              <description>
                            a depend example!
              </description>
              <echo message="The base dir is: ${basedir}"/>
       </target>
</project>

4、property元素(参量或者参数的定义),若要在外部引入某文件,例如build.properties文件,可以通过如下内容将其引入:<property file=” build.properties”/>

同时,Ant还提供了一些它自己的内置属性,如下:

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

ant.file:buildfile的绝对路径,如上面的各例子中,ant.file的值为E:"build.xml;

ant.version:Ant的版本,在本文中,值为1.7.0;

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

ant.java.version:Ant检测到的JDK的版本。

备注:ant中若引用property或者它的内置属性,用${}括号起来引用。

<?xml version="1.0"?>
<project name="propertyStudy" default="example">
  <property name="name" value="amigo"/>
  <!--读取属性文件的属性配置-->
  <property file="foo.properties"/>
  <property name="age" value="25"/>
   <target name="example">
        <echo message="name: ${name}, age: ${age}"/>
   </target>
</project>

5、Ant的任务介绍

1、输出信息

<echo message="xxx"/>
<echo>yyyy</echo>     

2、copy任务

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

Eg1.复制单个文件:<copy file="file.txt" tofile="copy.txt"/>

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

   <copy todir="../newdir/dest_dir"> 
            <fileset dir="src_dir"/>

  </copy>

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

  <copy file="file.txt" todir="../other/dir"/>
  <copyfile src="test.java" dest="subdir/test.java">

dest:代表目标目录

Eg4.拷贝一堆文件到一个目录

<copy todir="../dest/dir">
    <fileset dir="src_dir">
       <exclude name="**/*.java">
   </fileset>
</copy>

Eg5.拷贝一个目录下的东西到另一个目录下(includes加入,excludes排除,即排除这些之外的东西都要加入)

<copy src="${src}/resources" dest="${dist}" includes="**/*.java" excludes="**/Test.java"/>

2、delete任务

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

Eg1. 删除某个文件:<delete file="photo/amigo.jpg"/>

Eg2. 删除某个目录:<delete dir="photo"/> 

Eg3. 删除所有的备份目录或空目录:(也可以使用include和exclude)

        <delete includeEmptyDirs="true">
               <fileset dir="." includes="**/*.bak"/>
        </delete>

3.       mkdir任务

      创建目录。eg:<mkdir dir="build"/>

4、move任务 

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

Eg1. 移动单个文件:<move file="fromfile" tofile=”tofile”/>

Eg2. 移动单个文件到另一个目录:<move file="fromfile" todir=”movedir”/>

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

        <move todir="newdir">
               <fileset dir="olddir"/>
        </move>

5、重命名任务

<rename src="foo.jar" dest="ant-${version}.jar"/>  

6、Touch的使用

如果文件不存在,创建文件,如果存在,更改最后访问时间为系统时间

<touch file="myfile"/>

7、打Jar包

<target name="build" depends="compile">
    <jar destfile="${hello_jar}" basedir="${dest}"/>
</target>

8、压缩zip文件

<zip destfmlile="${dist}/manual.zip"
       basedir="htdocs/manual"
       includes="api/**/*.html"
       excludes="**/todo.html"/>

6、利用Ant构建和部署Java工程

       参考我的另一篇博客:https://cloud.tencent.com/developer/article/1062519

7、一份Ant的API文档:http://files.cnblogs.com/files/jmcui/ant%E4%BD%BF%E7%94%A8%E5%B8%AE%E5%8A%A9%E6%89%8B%E5%86%8C_%E4%B8%AD%E6%96%87.pdf

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

springboot(14)redis实现session共享

1.3K4
来自专栏黑泽君的专栏

eclipse中如何删除已经添加到 Web App Libraries 中引用的jar包

在 eclipse 中的 动态web项目 中,例如:我们通过向  /bos19/WebContent/WEB-INF/lib 中添加我们需要用到的jar包,如下...

1.6K2
来自专栏SpringBoot 核心技术

SpringCloud组件:Eureka服务注册中心内置的REST节点列表

你有没有考虑过Eureka Client与Eureka Server是通过什么方式进行通讯的? 为什么Client启动成功后Server就会被注册到Serve...

6252
来自专栏一名合格java开发的自我修养

java接口调用——webservice就是一个RPC而已

  很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法。就是本地...

1602
来自专栏技术墨客

Hazelcast集群服务(3)——集群功能详解

    在前2篇博文中,介绍了 Hazelcast的基本原理 和 Hazelcast基本配置。后续的博文会逐一介绍Hazelcast的主要功能组件。本篇将详细说...

2004
来自专栏安恒网络空间安全讲武堂

PHP的libcurl中存在的一些问题

PHP的libcurl中存在的一些问题 看了近来的几场ctf题目,学习了一些关于php libcurl的一些知识,在这里总结一下。 0x1发送POST请求时造成...

2385
来自专栏钟绍威的专栏

内存屏障保证缓存一致性优化

 在前面内存系统重排序提到,“写缓存没有及时刷新到内存,导致不同处理器缓存的值不一样”,出现这种情况是糟糕的,所幸处理器遵循缓存一致性协议能够保证足够的可见性又...

3149
来自专栏编程

深入理解RPC之传输篇

RPC 被称为“远程过程调用”,表明了一个方法调用会跨越网络,跨越进程,所以传输层是不可或缺的。一说到网络传输,一堆名词就蹦了出来:TCP、UDP、HTTP,同...

2657
来自专栏LEo的网络日志

如何调试Windows的stackdump文件

3738
来自专栏FreeBuf

使用fuzzDB进行web安全测试

写在前面: fuzzDB看字面意思就知道,他是一个用于fuzz网站的库。类似于wwwscan之类工具的字典,但是他的过人之处是他是“开源”的,会有很多大神帮你维...

3348

扫码关注云+社区

领取腾讯云代金券