Ant学习记录(一)

写在前面

  1. Ant目前已经基本很少有人用了,基本都是Maven,甚至Gradle
  2. 什么时候使用Ant,或者说是Maven、Gradle之类的构建够工具?
    【1】服务器部署的时候
    【2】Linux系统或者UNIX系统
  3. 本文参考 https://blog.csdn.net/tarena_zy520/article/details/84700868

一、概念理解

  1. Ant是构建工具的一种,它的前身是make,但是make多用于c/c++,Ant则是针对Java程序构建。
  2. 优缺点:
    【1】优点:跨平台 --因为ant是使用java编写的,所以它跨平台。
    【2】缺点:技术已经比较落后,构建需要写的东西比较多,不及Maven或者Gradle。
  3. 配置文件build.xml,类似于Maven中的pom.xml
  4. target 任务,Ant构建项目的方式是通过执行一个个的target任务实现的。

二、Ant环境搭建

  1. 因为是Java写的,所以要先安装JDK,配置JAVA_HOME ,PATH ,CLASS_PATH等环境变量。
  2. 下载Ant,地址http://ant.apache.org/
    你好
    根据说明可以看出1.9x版本的需要jdk1.7,1.10.x版本的需要jdk1.8,根据自身需要进行下载。
    TIPS: 后面的PGP/SHA1/SHA512是表示以该加密方式下载,下载后会验证文件是否被修改过(植入木马之类)。
  3. 解压到自定义目录,设置Ant环境变量ANT_HOMEPATH
  4. cmd验证是否配置正确。
    在这里插入图片描述

三、使用Ant构建HelloWorld

  1. 创建src文件夹,在其中创建HelloWorld.java文件,写入一下内容:
package test.ant;
public class HelloWorld{
public static void main(String[] args){
   System.out.println("Hello world1");
}
};
  1. 要运行ant需要有一个默认的配置文件:build.xml,类似于Maven的pom.xml。如果不是默认名称的xml,执行时需指明文件名称,如:Ant –buildfile test.xml
    在src下创建一个build.xml文件,写入以下内容:
<?xml version="1.0" encoding="UTF-8" ?>
<!--name指定项目名称,default指定默认的运行任务,basedir指定工作的根目录-->
<project name="HelloWorld" default="run" basedir=".">
<!--配置在该文档中会用到的属性key、value-->
<!--也可以直接引入外部的.property文件,如下:-->
<!--<property file="all.properties" />-->
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello1.jar"/>
<!--真正需要执行的任务,用target标签指明-->
<!--每个target都有一个唯一的name值-->
<target name="init">
   <!--具体要做的事情,创建目录-->
   <mkdir dir="${dest}"/>
</target>
<!--target标签中的depends指明该任务需要依赖的其他任务,compile任务执行之前需要先执行init任务-->
<target name="compile" depends="init">
   <!--srcdir指明源码的位置,destdir指明编译后的存放路径-->
   <javac srcdir="${src}" destdir="${dest}"/>
</target>
<!--打成jar包,jarfile指明打包的文件名,basedir指明被归档的文件名-->
<target name="build" depends="compile">
   <jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<!--运行jar包-->
<target name="run" depends="build">
   <java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
</target>
<!--删除生成的文件,dir表示删除的目录,file表示删除的文件-->
<target name="clean">
   <delete dir="${dest}" />
   <delete file="${hello_jar}" />
</target>
<!---多个依赖中间使用“,”隔开-->
<!--在一个target中可以调用其他的target,只需要写明ant标签和该标签的target属性,即目标target的name属性值-->
<target name="rerun" depends="clean,run">
   <ant target="clean" />
   <ant target="run" />
</target>
</project>
  1. cd至build.xml所在的目录,在命令行窗口执行命令:ant,此处的ant等同于ant run(因为在我的build.xml中配置的默认执行是run)
    结果如下:
    在这里插入图片描述
    生成的文档结构:
    在这里插入图片描述
  2. Ant支持阶段性的命令,比如你并不想运行程序,只想执行编译打包。键入ant build 即可。
    Ant中的每一个任务都可以这样调用 ant + target name

四、整合Ant

(一). 直接整合build.xml

  1. 情景:一个项目分成很多个模块,每个模块有一个build.xml,我们需要整合这些build.xml。
  2. 做法:尽可能的使用原先build.xml中的内容。
  3. 例子:有三个小组,他们分别有一个src 和一个写好的build.xml。这个时候你拿到他们的src,建立三个文件夹src1 ,src2, src3分别把他们的src和build.xml放进去,然后写一个build.xml
<?xml version="1.0" encoding="UTF-8" ?>
<project name="main" default="build" basedir=".">
<property name="bin" value="${basedir}\bin" />
<property name="src1" value="${basedir}\src1" />
<property name="src2" value="${basedir}\src2" />
<property name="src3" value="${basedir}\src3" />
<target name="init">
   <mkdir dir="${bin}" />
</target>
<target name="run">
<!--在一个target中可以调用其他xml中的target,只需要写明dir和target属性-->
   <ant dir="${src1}" target="run" />
   <ant dir="${src2}" target="run" />
   <ant dir="${src3}" target="run" />
</target>
<target name="clean">
   <ant dir="${src1}" target="clean" />
   <ant dir="${src2}" target="clean" />
   <ant dir="${src3}" target="clean" />
</target>
<target name="build" depends="init,call">
   <!--一个copy可以包含多个fileset-->
   <copy todir="${bin}">
    <fileset dir="${src1}">
     <include name="*.jar" />
    </fileset>
    <fileset dir="${src2}">
     <include name="*.jar" />
    </fileset>
    <fileset dir="${src3}">
     <include name="*.jar" />
    </fileset>
   </copy>
</target>
<target name="rebuild" depends="build,clean">
   <ant target="clean" />
   <ant target="build" />
</target>
</project>

(二). 通过引入propertyxml include可以使xml更加简洁。

1. propery 属性文件的使用

  1. 情景:一些共同、类似的property使build.xml变的很臃肿,

  2. 做法:可以直接引用外部properties文件。
    【1】. 新建all.properties,内容如下

    src1=D:\\study\\ant\\src1
    src2=D:\\study\\ant\\src2
    src3=D:\\study\\ant\\src3
    

    【2】. 然后你的build.xml文件可以这样写,别人只需要更改配置文件,而不许要更改你的build.xml文件了

    <?xml version="1.0" encoding="UTF-8" ?>
    <project name="main" default="build" basedir=".">
    <property file="all.properties" />
    <property name="bin" value="${basedir}\bin" />
    <target name="init">
       <mkdir dir="${bin}" />
    </target>
    <target name="run">
       <ant dir="${src1}" target="run" />
       <ant dir="${src2}" target="run" />
       <ant dir="${src3}" target="run" />
    </target>
    <target name="clean">
       <ant dir="${src1}" target="clean" />
       <ant dir="${src2}" target="clean" />
       <ant dir="${src3}" target="clean" />
    </target>
    <target name="build" depends="init,call">
       <copy todir="${bin}">
        <fileset dir="${src1}">
         <include name="*.jar" />
        </fileset>
        <fileset dir="${src2}">
         <include name="*.jar" />
        </fileset>
        <fileset dir="${src3}">
         <include name="*.jar" />
        </fileset>
       </copy>
    </target>
    <target name="rebuild" depends="build,clean">
       <ant target="clean" />
       <ant target="build" />
    </target>
    </project>
    

2. xml include 的使用

  1. 情景:你想给每个小组的build.xml加入几个共同的target,

  2. 做法:你可以写一个include.xml文件,在每个build.xml中引用该include.xml

  3. 优点:不单可以提取出属性来,连target也可以。

    【1】include.xml 内容如下

    <?xml version="1.0" encoding="UTF-8" ?>
    <property name="src" value="src"/>
    <property name="dest" value="classes"/>
    <target name="test" >
    	<ant target="run" />
    </target>
    

    【2】更改三个build.xml文件,每个里边加入如下内容

    <!--include a xml file ,it can be common propery ,can be also a target   -->
    <!DOCTYPE project [<!ENTITY share-variable SYSTEM "file:../include.xml">]>
    &share-variable;
    

    【3】此时,只需在include.xml添加propery或target,build.xml会同时添加这些propery和target。内容如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!--include a xml file ,it can be common propery ,can be also a target   -->
    <!DOCTYPE project [
    <!ENTITY share-variable SYSTEM "file:../include.xml">
    ]>
    <project name="HelloWorld" default="run" basedir=".">
    <!--use the include   -->
    &share-variable;
    <!--defined the property-->
    <!--via include
    <property name="src" value="src"/>
    <property name="dest" value="classes"/>
    -->
    <property name="hello_jar" value="hello1.jar"/>
    <!--define the op-->
    <target name="init">
       <mkdir dir="${dest}"/>
    </target>
    <target name="compile" depends="init">
       <javac srcdir="${src}" destdir="${dest}"/>
    </target>
    <target name="build" depends="compile">
       <jar jarfile="${hello_jar}" basedir="${dest}"/>
    </target>
    <target name="run" depends="build">
       <java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
    </target>
    <target name="clean">
       <delete dir="${dest}" />
       <delete file="${hello_jar}" />
    </target>
    <target name="rerun" depends="clean,run">
       <ant target="clean" />
       <ant target="run" />
    </target>
    </project>
    

五、Eclipse中使用Ant

(一)导入Ant项目至Eclipse 的坑

  1. 由于我先了解的maven,maven有一个命令mvn eclipse:eclipse可以吧maven项目转成eclipse也认识的项目。但是Ant我还没找到这样的插件。但是Eclipse自带Ant插件,可以根据ant项目的build.xml自动导入项目。
  2. eclipse中,New->Project->Java Project From Existing Ant Buildfile,选择我在第三章节创建的HelloWorld中的build.xml
    在这里插入图片描述
    得到的项目结构如下:
    在这里插入图片描述
  3. 选择build.xml右键run as Ant build
    在这里插入图片描述
    出现以下错误:
    在这里插入图片描述
  4. 检查build.xml,发现之前使用Ant命令之所以能够成功,是因为我手动创建的src文件夹。因此在init任务中添加以下内容:
    在这里插入图片描述
  5. 感觉这下应该OK了,运行Ant build,结果还是报错:
    在这里插入图片描述
  6. 找不到类。打开jar,发现空空如也,什么也没有编译进来:
    在这里插入图片描述
  7. 比较郁闷,我的test/ant下明明有HelloWorld.java怎么什么也没有编译呢?想了半天想不明白,无意中看到HelloWorld.java的属性:
    在这里插入图片描述
  8. 竟然发现,是引用的我一开始用Ant构建项目时的路径,莫非我的workspace下根本没有HelloWorld.java?赶紧打开看看:
    在这里插入图片描述
    对比发现竟然不是同一个目录,src下什么也没有!难怪什么也没有编译进来。原因我在想是不是Ant构建时的路径有问题,但是并未排查。希望大神指点。
  9. 最后妥协,在src目录下创建test/ant/HelloWorld.java。再次Ant build。如下:
    在这里插入图片描述
    运行成功:
    在这里插入图片描述
  10. 但是后期的实验中发现使用Ant构建的项目,导入Eclipse后,windows文件系统中的内容无法与Eclipse中同步,还没有研究出来。。望大神指点。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值