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/
    Ant学习记录(一)_第1张图片
    根据说明可以看出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文件,写入以下内容:


<project name="HelloWorld" default="run" basedir=".">



<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello1.jar"/>


<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>
  1. cd至build.xml所在的目录,在命令行窗口执行命令:ant,此处的ant等同于ant run(因为在我的build.xml中配置的默认执行是run)
    结果如下:
    Ant学习记录(一)_第2张图片
    生成的文档结构:
    Ant学习记录(一)_第3张图片
  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

<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">

   <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>

(二). 通过引入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文件了

    
    <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 内容如下

    
    <property name="src" value="src"/>
    <property name="dest" value="classes"/>
    <target name="test" >
    	<ant target="run" />
    target>
    

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

    
    ]>
    &share-variable;
    

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

    
    
    
    ]>
    <project name="HelloWorld" default="run" basedir=".">
    
    &share-variable;
    
    
    <property name="hello_jar" value="hello1.jar"/>
    
    <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
    Ant学习记录(一)_第4张图片
    得到的项目结构如下:
    Ant学习记录(一)_第5张图片
  3. 选择build.xml右键run as Ant build
    Ant学习记录(一)_第6张图片
    出现以下错误:
    Ant学习记录(一)_第7张图片
  4. 检查build.xml,发现之前使用Ant命令之所以能够成功,是因为我手动创建的src文件夹。因此在init任务中添加以下内容:
    Ant学习记录(一)_第8张图片
  5. 感觉这下应该OK了,运行Ant build,结果还是报错:
    Ant学习记录(一)_第9张图片
  6. 找不到类。打开jar,发现空空如也,什么也没有编译进来:
    Ant学习记录(一)_第10张图片
  7. 比较郁闷,我的test/ant下明明有HelloWorld.java怎么什么也没有编译呢?想了半天想不明白,无意中看到HelloWorld.java的属性:
    Ant学习记录(一)_第11张图片
  8. 竟然发现,是引用的我一开始用Ant构建项目时的路径,莫非我的workspace下根本没有HelloWorld.java?赶紧打开看看:
    在这里插入图片描述
    对比发现竟然不是同一个目录,src下什么也没有!难怪什么也没有编译进来。原因我在想是不是Ant构建时的路径有问题,但是并未排查。希望大神指点。
  9. 最后妥协,在src目录下创建test/ant/HelloWorld.java。再次Ant build。如下:
    在这里插入图片描述
    运行成功:
    Ant学习记录(一)_第12张图片
  10. 但是后期的实验中发现使用Ant构建的项目,导入Eclipse后,windows文件系统中的内容无法与Eclipse中同步,还没有研究出来。。望大神指点。

你可能感兴趣的:(Ant)