Ant笔记

本文介绍Ant构建工具的基本概念、常用命令及其应用场景。通过一个简单的Java项目示例,演示如何使用Ant进行编译、打包和运行。

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

ANT常用命令
ant:使用当前目录下的build.xml运行Ant,执行缺省的target。
ant -buildfile test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。

ant -file test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。

ant -f test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。
ant -f test.xml dist:使用当前目录下的test.xml运行Ant,执行一个叫做dist的target。
ant -buildfile test.xml -Dbuild=build/classes dist 执行test.xml 中dist的target,并设定build属性

Ant核心概念简介
project:每个构建文件包含一个工程。
depends:每个工程包含若干个目标(target)。目标可以依赖于其他的目标。
task:目标包含一个或多个任务(task)。

ANT示例

目录结构文字说明
    在建立build.xml文件之前,我们先说下目录结构:
    工程主目录: C:/course/ant/demo
    源程序目录: /src
    编译后的 class文件目录:/classes
    打包好的jar程序目录:/hello.jar
    工程配置文件:/build.xml

首先,我们使用文本编辑器写第一个程序:HelloWorld.java
package test.ant;
public class HelloWorld {
    public static void main(String[] args)
        System.out.println(“hello world”);
    }
}

再建立一个build.xml文件完成上面的步骤,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="run" basedir=".">
    <property name="src" value="src" />
    <property name="dest" value="classes" />
    <property name="hello_jar" value="hello.jar" />

    <target name="init">
        <mkdir dir="${dest}" />
    </target>

    <target name="compile" depends="init">
        <javac srcdir="${src}" destdir="${dest}" />
    </target>

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

    <target name="run" depends="jar">
        <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>

解释以上Ant配置文件
<project name="HelloWorld" default="run" basedir="."/>
Ant的所有内容必须包含在这个里面,name是我们给它取的名字,
basedir看名字就知道是工作的根目录。其中的”.”代表当前目录。
default代表默认要做的事情。

<property name="src" value="src" />
<property name="dest" value="classes" />
<property name="hello_jar" value="hello.jar" />
类似程序中的变量

<target name="init">
    <mkdir dir="${dest}" />
</target>
目的:创建一个文件夹
把我们想做的每一件事写成一个target,它有一个名字。使用mkdir来创建文件夹

<target name="compile" depends="init">
    <javac srcdir="${src}" destdir="${dest}" />
</target>
目的:编译程序,把源程序编译到目标地点
depends 是它所依赖的target,依赖的target会先执行

<target name="jar" depends="compile">
    <jar jarfile="${hello_jar}" basedir="${dest}" />
</target>
目的:打jar 包

<target name="run" depends="jar">
    <java classname="test.ant.HelloWorld" classpath="${hello_jar}" />
</target>
目的:运行jar包内的程序


<target name="clean">
    <delete dir="${dest}" />
    <delete file="${hello_jar}" />
</target>
目的:删除生成的文件

<target name="rerun" depends="clean, run">
    <ant target="clean" />
    <ant target="run" />
</target>
目的:再次运行,这里显示了如何在一个 target 里边调用其他的 target


步骤再重申一遍:
建一个src文件夹,然后写一个HelloWorld.java,按照包结构目录放进去;
写build.xml文件
在命令行输入 cmd, ant做测试。

project属性
name    项目名称,可自由定义。
default    定义一个缺省(默认)的target,指定target的build.xml时,就会执行这个缺省的target。
basedir    用于定义项目的基路径。
description    表示项目的描述

property属性
将属性名放在“${}”之间并放在属性值的位置来实现的
首先设定property:
    <property name="src" value="src" />
    <property name="dest" value="classes" />
然后在其他地方引用property:
    <target name="compile" depends="init">
        <javac srcdir="${src}" destdir="${dest}" />
    </target>

target属性
name    target的名字。
depends    用逗号分隔的target的名字列表,也就是依赖列表
if    执行target需要清除设定的属性名
unless    执行target需要清除设定的属性名
description    描述target的功能,这些描述可由-projexthelp 命令行输出。

Ant常用task
设置classpath
当需要指定类似路径的值时,可以使用嵌套元素。一般的形式是
<classpath>
    <pathelement path="${classpath}"/>
    <pathelement location="lib/jar.jar"/>
</classpath>
location属性指定了相对于project基目录的一个文件和目录
而path属性接受逗号或分号分隔的一个位置列表

输出信息
<echo message=”XXXXXX”>
<echo>XXXXXX</echo>


复制文件与目录<copy>
file表示源文件
tofile 表示目标文件

todir 表示目标目录

overwrite表示指定是否覆盖目标文件,默认值是不覆盖
includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝
failonerror 表示指定如目标没有发现是否自动停止,默认值是停止

复制一个文件到当前目录,并重命名
<copy file="myfile.txt" tofile="mycopy.txt"/>

复制一个文件到指定目录
<copy file="myfile.txt" todir="build /newdir"/>

复制一个文件到指定位置(使用copyfile)
<copyfile src="test.java" dest="subdir/test.java"/>

复制一个文件集合到一个目录
<copy todir="build/newdir"><fileset dir="src_dir"/></copy>

复制一个文件集合到一个目录,但不包含某些文件
<copy todir="dest/dir">
    <fileset dir="src_dir" excludes="**/*.java"/>
</copy>

删除文件与目录
<delete>
file表示要删除的文件
dir表示要删除的目录

includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。
failonerror 表示指定当碰到错误是否停止,默认值是自动停止

删除一个文件
<delete file="/lib/aaa.jar"/>

删除一个目录
<delete dir="lib"/>

删除一个目录下符合规则的文件,包括子目录。这里是删除.bak文件
<delete>
    <fileset dir="." includes="**/*.bak"/>
</delete>



删除一个目录下所有文件和目录,包括当前目录
<delete includeEmptyDirs="true">
    <fileset dir="build"/>
</delete>
<fileset dir="build"/>也可以写成<fileset dir="build" includes="**/*"/>

删除当前目录下所有的svn相关文件
<delete defaultexcludes="false">
    <fileset dir="src" includes="**/*.svn"/>
</delete>


删除文件目录树
<deltree dir="dist"/>

建立目录
<mkdir>
<mkdir dir="./build/lib"/>
<mkdir dir="${dist}/lib"/>


打jar包
<target name="jar" depends="compile">
    <jar jarfile="${hello_jar}" basedir="${dest}" />
</target>
或者
<jar destfile="${dist}/lib/app.jar"
       basedir="${build}/classes"
       includes="mypackage/test/**"
       excludes="**/*Test*.class"
/>

运行jar包
<target name="run" depends="jar">
    <java classname="test.ant.HelloWorld" classpath="${hello_jar}" />
</target>

传递参数运行
<java classname="test.Main">
    <arg value="-h"/>
<classpath>
       <pathelement location="dist/test.jar"/>
<pathelement path="/Users/antoine/dev/asf/ant-core/bootstrap/lib/ant-launcher.jar />
</classpath>
</java>

发布程序
<property name="project.name" value="antdemo"/>
<property name="webserver" value="C:/java/tomcat-6.0.18/webapps" />
<!-- 发布项目(其实就是WebContent目录)到web容器下 -->
<target name="deploy" depends="init,compile,test" description="将工程打成war包">
    <echo message="deploy项目到Web服务器" />
    <mkdir dir="${webserver}/${project.name}" />
    <copy todir="${webserver}/${project.name}" overwrite="true">
        <fileset dir="${WebContent.dir}" />
    </copy>
</target>

用Ant完成生成javadoc的任务
<target name="create_doc">
    <javadoc destdir="${distDir}" encoding="UTF-8" docencoding="UTF-8" charset="utf-8">
<!-- 防止中文乱码->
    <!-- dir是你的代码位置,记住是java文件的位置而不是class文件的位置-->
        <packageset dir="${srcDir}">
            <!-- exclude是不想生成哪些类的javadoc -->
            <exclude name="${excludeClasses}" />

            <include name="com/***/util/**"/>
        </packageset>
    </javadoc>
</target>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值