Ant配置文件详解及项目应用

本文介绍了Ant的基本概念和使用方法,包括Ant的安装配置,如JDK的安装和环境变量设置。详细讲解了如何使用Ant进行编译和打包,通过创建工程、编写build.xml文件,并执行编译打包操作,最终生成AntTest.war文件。总结指出,理解build.xml文件是掌握Ant关键,Ant的target类似于Maven的goal,用于组织任务执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

最近接手了一个老项目,使用Ant进行编译和打包。现在用的都是MAVEN,或者是Gradle。用了就总结一下,都是营养啊。


一、Ant是什么?

Ant是Apache基金下的一个项目,能够就将编译、测试、部署编排在一起实现自动化,类似于Maven的各个生命周期执行过程。
Ant运行的核心是一个XML文件,执行各种target。

二、Ant的使用

1.安装及配置

1.1JDK安装

Ant运行是依赖Java环境的,因此先安装Java环境。
并配置“JAVA_HOME”环境变量。
在这里插入图片描述

1.2安装Ant

下载安装包

到官网下载Ant,https://ant.apache.org/bindownload.cgi

这里注意Ant的不同版本对JDK版本是有不同的要求的。

如果本机的JDK版本是8及以上,那么请选择1.10.*版本。

如果本机的JDK版本是8以下,选择1.9.*版本。

配置环境变量

新建ANT_HOME
在这里插入图片描述
修改PATH,增加ANT的路径
在这里插入图片描述
测试
打开命令行工具,执行ant -version查看版本
在这里插入图片描述

2.使用Ant进行编译打包

2.1创建工程

Authority:权限子模块
Upload:上传子模块
src:java及配置文件汇聚目录
build:编译目录
在这里插入图片描述
在工程根目录下,创建build.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    build.xml文件:
    每个需要构建的项目都要定义一个build.xml文件(默认的名称),对构建过程进行定义
    project标签:build.xml文件只能有一个project标签,代表定义一个构建项目
    name:项目名称 。
    basedir:基准目录,构建过程中的相对路径都会参照这个路径来。按照一般的习惯,build.xml都会放在项目的根目录下,
    因此这里使用"."标示当前目录,也就是相对路径的跟都是项目根目录,这样很方便。
    default:对应某一个target,当使用该配置文件,运行ant的时候,会把这个target作为执行的入口。
    有点类似Maven中指定程序的主文件。
    property标签:对属性的定义,共后续的构建步骤中使用。类似于java 的 static final String
    name:属性名称,大消息敏感
    value:属性值
    target标签:一个构建项目可以包含多个target构建目标。一个构建目标,也可以依赖另外一个target构建目标。类似于Maven的goal
    name:目标名称
    depends:需要依赖的target目标,通过这个属性,也就实现了target的顺序执行
    if:表示仅当条件满足的时候才执行target目标
-->
<project name="uip" basedir="." default="makewar">
    <!-- 定义代码编译时需要依赖的lib包的路径  -->
    <property name="classpath_lib" value="WebApp/WEB-INF/lib" />
    <!-- 定义lib包的路径  -->
    <path id="classpath">
        <fileset dir="${classpath_lib}">
            <include name="*.jar" />
        </fileset>
    </path>
    <!-- 
        定义<javac> 的 debuglevel值 。设置编译信息中显示的内容
        source:源文件名称
        lines:源码中行号信息
        vars:方法的局部变量信息
    -->
    <property name="debuglevel" value="source,lines,vars" />
    <property name="target" value="1.8" />
    <property name="source" value="1.8" />

    <!-- 获取源码路径中源码时候需要去除java文件,在这里配置 -->
    <patternset id="no.java">
        <exclude name="**/*.java" />
    </patternset>

    <!-- 
        定义初始化过程
    -->
    <target name="init">
        <property name="build" value="build/">
        </property>
        <property name="src" value="src">
        </property>
        <!-- 删除build目录 -->
        <delete dir="${build}">
        </delete>
        <!-- 创建build目录 -->
        <mkdir dir="${build}" />
        <!-- 创建build\WEB-INF目录 -->
        <mkdir dir="${build}\WEB-INF" />
        <!-- 创建build\WEB-INF\classes目录 -->
        <mkdir dir="${build}\WEB-INF\classes" />
        <!-- 创建build\WEB-INF\lib目录 -->
        <mkdir dir="${build}\WEB-INF\lib" />
        <!-- 拷贝web文件到 build目录下 -->
        <copy todir="${build}">
            <!-- 获取 WebApp目录下的文件 -->
            <fileset dir="${basedir}\WebApp">
                <include name="WEB-INF/**" />
                <include name="**" />
            </fileset>
            <!-- 拷贝updateFiles.txt文件 -->
            <fileset dir="${basedir}">
                <include name="updateFiles.txt" />
            </fileset>
        </copy>
        <!-- 拷贝java代码到src目录下,srcdocument  -->
        <copy todir="${src}">
            <fileset dir="${basedir}/Authority">
                <include name="**" />
            </fileset>
        </copy>
        <!-- 拷贝java代码到src目录下,srcfaq  -->
        <copy todir="${src}">
            <fileset dir="${basedir}/Upload">
                <include name="**" />
            </fileset>
        </copy>
        <!-- 拷贝配置文件到build/WEB-INF/classes目录下 -->
        <copy todir="${build}/WEB-INF/classes">
            <!-- 去除java文件 -->
            <fileset dir="${src}">
                <patternset refid="no.java" />
            </fileset>
        </copy>
    </target>
    <!-- 定义complie目标,执行编译工作。依赖init目标 -->
    <target name="complie" depends="init">
        <!-- 
            用于编译一个或多个Java文件 
            srcdir:源码路径,这里使用了上文定义的src变量
            destdir:编译后的class文件输出的目录
            classpathref:所使用的类路径,也就是编译源码的时候,需要依赖的class文件位置
            debug:是否打印编译信息,默认是不打印的,如果设置为true,要与debugLevel组合进行设置
            debugLevel:输出编译信息的规则
        -->
        <javac srcdir="${src}" destdir="${build}/WEB-INF/classes" encoding="utf-8" classpathref="classpath" includeantruntime="on">
        </javac>
    </target>
    <!-- 定义makewar目标,执行打包工作。依赖complie目标 -->
    <target name="makewar" depends="complie">
        <!-- 
            打war包
            warfile:war文件定义
            webxml:webxml文件位置
        -->
        <war warfile="AntTest.war" webxml="${build}/WEB-INF/web.xml">
            <!-- 需要的lib文件 -->
            <lib dir="${build}/WEB-INF/lib">
                <!-- 包含所有的文件 -->
                <include name="**" />
            </lib>
            <fileset dir="${build}" />
        </war>
    </target>
</project>

2.2执行编译打包

在这里插入图片描述

2.3打包结果

在这里插入图片描述
同时在根目录下也生成了AntTest.war


总结

第一次使用Ant,之前一直用的都是Maven,按照目前肤浅的理解,总结如下:

  1. Ant 可以进行编译、打包操作。核心是它的配置文件build.xml(把这个文件弄明白,ant的使用基本就没问题了)
  2. 在核心配置文件build.xml中,Ant为我们提供了很多工具,通过这些工具,完成我们的编译逻辑。比如:
    文件目录操作:创建删除
    文件操作:遍历、复制、打包
    Java编译操作(所以Ant的使用是要依赖JDK环境的):编译
  3. Ant中的target类似于Maven的goal,都是执行一项任务。只不过Maven把goal已经定义好了(也可以自己扩展),包括编译、测试、打包、发布等。不同的target之间通过depends来进行编排。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值