Ant 简明教程

ANT打包编译部署工具学习笔记 1.安装apache-ant-1.5.4或其他版本2.配置环境变量:    ANT_HOME=ant安装目录       PATH=%PATH%;%ANT_HOME%/bin                                                                                              3.build.xml 阅读详情

一、ant关键元素

1. project元素

    project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。

1) name 属性

    用于指定 project 元素的名称。

2) default 属性

    用于指定 project 默认执行时所执行的 target 的名称。

3) basedir 属性

    用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。

?
1
2
3
4
5
6
<? xml  version = "1.0"  ?>
< project  name  = "antPro"  default  = "getBaseDir"  basedir  = "C:/ThinkInJavaCode" >
         < target   name = "getBaseDir" >
                < echo  message = "The base dir is: ${basedir}" />
         </ target >
</ project >

    从上例可以看出,在这里定义了default 属性的值为getBaseDir ,即当运行ant 命令时,如果没有指明待执行的target,则将执行默认的target--getBaseDir 。此外,还定义了basedir 属性的值为 "C:/ThinkInJavaCode" ,进入"C:/ThinkInJavaCode" 后运行ant 命令,得一下结果:

?
1
2
3
4
5
6
7
Buildfile: C:\ThinkInJavaCode\build.xml
 
sayBaseDir:
      [echo] The base dir is: C:\ThinkInJavaCode
 
BUILD SUCCESSFUL
Total time: 0 seconds
2. target 元素

   target为Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target 可以存在相互依赖关系。它有如下属性:

1) name 属性

    指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。

2) depends 属性

    用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target 。被依赖的 target 会先执行。

3) if 属性

    用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行。

4) unless 属性

    该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。

5) description 属性

    该属性是关于 target 功能的简短描述和说明。

    举例说明如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
<? xml  version = "1.0"  ?>
< project  name  = "targetPro"  default = "targetB" >
< target  name = "targetA"  if  = "ant.java.version" >
         < echo  message  = "Java Version: ${ant.java.version}" />
     </ target >
     < target  name = "targetB"   depends  = "targetA"  unless  = "philander" >
         < description >
             a depend example!
         </ description >
         < echo  message  = "The base dir is: ${basedir}" />
     </ target >
</ project >

    从以下结果后可以看到,我们运行的是名为 targetB 的target ,由于它依赖于targetA ,所以 targetA 将首先被执行,同时因为系统配置了JDK,所以 ant.java.version 属性存在,执行了targetA,输出信息:"[echo] Java Version: 1.6 ",targetA 执行完毕后,接着执行 targetB ,因为philander不存在,而unless属性是在不存在时进入所在target 的,由此可知 targetB 得以执行,输出信息:"[echo] The base dir is: C:\ThinkInJavaCode"。

?
1
2
3
4
5
6
7
8
9
10
Buildfile: C:\ThinkInJavaCode\build.xml
 
targetA:
      [echo] Java Version: 1.6
 
targetB:
      [echo] The base dir is: C:\ThinkInJavaCode
 
BUILD SUCCESSFUL
Total time: 0 seconds
3. property 元素

    property元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引入:

?
1
< property  file=” build.properties”/>

property 元素可用作 task 的属性值。在 task 中是通过将属性名放在“ ${ ”和“ } ”之间,并放在 task 属性值的位置来实现的。

    Ant 提供了一些内置的属性,它能得到的系统属性的列表与 Java 文档中 System.getPropertis() 方法得到的属性一致,这些系统属性可参考 sun 网站的说明。同时, Ant 还提供了一些它自己的内置属性,如下:

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

    ant.file:buildfile的绝对路径,上例中ant.file值为C:\ThinkInJavaCode\build.xml;

    ant.version:Ant 的版本信息,本文为1.8.1 ;

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

    ant.java.version:Ant 检测到的JDK版本,本文为 1.6 。

    举例说明如下:

?
1
2
3
4
5
6
7
8
<? xml  version = "1.0"  ?>
< project   name  = "propertyPro"   default  = "example" >
     < property   name  = "name"   value  = "philander" />
     < property   name  = "age"   value  = "25" />
     < target   name  = "example" >
          < echo   message  = "name: ${name}, age: ${age}" />
     </ target >
</ project >

    上例中用户设置了名为name 和age的两个属性,这两个属性设置后,在下文中可以通过 ${name} 和 ${age} 分别取得这两个属性值。

二、ANT常用命令

1. copy 命令

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

eg1. 复制单个文件:

?
1
< copy  file = "original.txt"  tofile = "copied.txt" />

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

?
1
2
3
< copy  todir = "../dest_dir" >
       < fileset  dir = "src_dir" />
  </ copy >

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

?
1
< copy  file = "source.txt"  todir = "../home/philander" />
2. delete 命令

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

eg1. 删除某个文件:

?
1
< delete  file = "/home/photos/philander.jpg" />

eg2. 删除某个目录:

?
1
< delete  dir = "/home/photos" />

eg3. 删除所有的备份目录或空目录:

?
1
2
3
< delete  includeEmptyDirs = "true" >
        < fileset  dir = "."  includes = "**/*.bak" />
</ delete >
3. mkdir 命令

    创建目录。 eg :

?
1
< mkdir  dir = "/home/philander/build/classes" />
4. move 命令

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

eg1. 移动单个文件:

?
1
< move  file = "sourcefile"  tofile=”destfile”/>

eg2. 移动单个文件到另一个目录:

?
1
< move  file = "sourcefile"  todir=”movedir”/>

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

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

5. echo 命令

    该任务的作用是根据日志或监控器的级别输出信息。它包括 message 、 file 、 append 和 level 四个属性,举例如下

?
1
< echo  message = "Hello,ANT"  file = "/home/philander/logs/ant.log"  append = "true" >

三、利用ant 构建和部署Java项目

    Ant 可以代替使用 javac 、 java 和 jar 等命令来执行 java 操作,从而达到轻松的构建和部署 Java 项目的目的。

1. 利用ant 的javac命令来编译Java程序

    Ant 的javac命令用于实现编译Java 程序的功能。下面来看一个简单的例子:首先我们建立名为 JavaTestPro的Java项目,建立src目录为源代码目录,在src目录下建立HelloWorld.java这个类文件。该类文件的内容如下:

?
1
2
3
4
5
public class HelloWorld {
      public static void main(String[] args) {
     System.out.println("hello world!");
      }
}

    同时在JavaTestPro项目的根目录下建立build.xml 文件,在该文件中编译sr 目录下的Java文件,并将编译后的class文件放入build/classes 目录中,整个项目的目录结构如下:

|JavaTestPro

      |src

      |build

            |classes

      |build.xml

     在编译前,需清除classes 目录,该文件的内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
<? xml  version = "1.0"  ?>
 
< project  name  = "javacTest"  default = "compile"  basedir = "." >
     < target  name = "clean" >
         < delete  dir = "${basedir}/build" />
     </ target >
     < target  name = "compile"   depends  = "clean" >
         < mkdir  dir  = "${basedir}/build/classes" />
         < javac  srcdir  = "${basedir}/src"  destdir  = "${basedir}/build/classes" />
     </ target >
</ project >

    在项目根目录(C:\ThinkInJavaCode\JavaTestPro)执行ant命令后,可在该目录下发现新生成的build/classes子目录,编译后生成的HelloWorld.class文件就在该目录下。

2. 使用java命令执行Java程序

    Ant 中可以使用 java命令实现运行Java程序的功能。可以在上面的build.xml基础上做修改来实现:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<? xml  version = "1.0"  ?>
< project  name  = "javacTest"  default = "run"  basedir = "." >
     < target  name = "clean" >
         < delete  dir = "${basedir}/build" />
     </ target >
     < target  name = "compile"   depends  = "clean" >
         < mkdir  dir  = "${basedir}/build/classes" />
         < javac  srcdir  = "${basedir}/src"  destdir  = "${basedir}/build/classes" />
     </ target >
      < target  name = "run"   depends  = "compile" >
         < java  classname  = "HelloWorld" >
             < classpath >
                < pathelement  path = "${basedir}/build/classes" />
             </ classpath >
         </ java >
     </ target >
</ project >

接着,就可以在控制台看见输出:"[java] hello world!"

3. 使用jar命令生成jar文件

    还可以在上例的基础上更进一步,来生成jar包,可在run 这个 target 下再加上如下 target :

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<? xml  version = "1.0"  ?>
< project  name  = "javacTest"  default = "jar"  basedir = "." >
     < target  name = "clean" >
         < delete  dir = "${basedir}/build" />
     </ target >
     < target  name = "compile"   depends  = "clean" >
         < mkdir  dir  = "${basedir}/build/classes" />
         < javac  srcdir  = "${basedir}/src"  destdir  = "${basedir}/build/classes" />
     </ target >
     < target  name = "run"   depends = "compile" >
           < java  classname  = "HelloWorld" >
     < classpath >
                     < pathelement  path = "${basedir}/build/classes" />
                  </ classpath >
            </ java >
     </ target >
     < target  name = "jar"  depends = "run" >
            < jar  destfile = "helloworld.jar"  basedir = "${basedir}/build/classes" >
                 < manifest >
         < attribute  name = "Main-class"  value = "HelloWorld" />
                 </ manifest >
             </ jar >
     </ target  >
</ project >

    其中,project的default 属性设置为应设为jar,ant运行完毕后,可看到在项目的根目录下生成了一个 helloworld.jar的jar包 。可通过运行以下命令来执行该jar包:

?
1
java -jar helloworld.jar
4. 使用war命令打包JavaEE项目

    建立一个JavaEE项目,其中src 为Java源代码目录,WebContent为各jsp存放目录,lib 为项目引用的的包的目录。在WebTest项目目录下建立了build.xml 文件,该文件为该工程的 Ant 构件文件。

|WebContent

    |src

    |build

        |classes

    |WebContent

        |META-INF

            |MANIFEST.MF

        |WEB-INF

            |lib

            |classes

        |HelloJSP.jsp

    |build.xml

    读者可以 src 目录下放入在前续例子中开发的 HelloWorld.java 文件,并在 WebContent下建立 HelloJSP.jsp 文件,其内容很简单,就是输出 Hello 信息,代码如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
<%@  page language= "java"  contentType= "text/html;charset=UTF-8"  pageEncoding= "UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
< meta  http-equiv = "Content-Type"  content = "text/html; charset=UTF-8" >
< title >war test for ant</ title >
</ head >
< body >
       Hello JSP!Hello Ant!
</ body >
</ html >

    接下来编写 build.xml 文件,其内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<? xml  version = "1.0"  encoding = "UTF-8"  ?>
< project  name  = "WebTest"  default  = "war"  basedir  = "." >
     < property   name  = "classes"  value  = "${basedir}/build/classes" />
     < property   name  = "build"  value  = "${basedir}/build" />
     < property   name  = "lib"  value  = "${basedir}/WebContent/WEB-INF/lib" />
      <!--  删除build 路径-->
     < target   name  = "clean" >
         < delete  dir  = "${build}" />
     </ target >
 
      <!--  建立build/classes 路径,并编译class 文件到build/classes 路径下-->
      < target  name  = "compile"   depends  = "clean" >
         < mkdir  dir  = "${classes}" />
         < javac  srcdir  = "${basedir}/src"   destdir  = "${classes}" />
      </ target >
 
      <!--  打war 包-->
      < target  name  = "war"  depends  = "compile" >
             < war  destfile  = "${build}/WebTest.war"   webxml  = "${basedir}/WebContent/WEB-INF/web.xml" >
             <!--  拷贝WebRoot 下除了WEB-INF 和META-INF 的两个文件夹-->
              < fileset  dir  = "${basedir}/WebContent"   includes  = "**/*.jsp" />
             <!--  拷贝lib 目录下的jar 包-->
             < lib  dir  = "${lib}" />
             <!--  拷贝build/classes 下的class 文件-->
             < classes  dir  = "${classes}" />
         </ war >
      </ target >
</ project >

     在C:\ThinkInJavaCode\WebTest目录下运行ant后,就生成了WebTest.war 文件了,然后可以将其放入Web容器(如Tomcat)的相应目录下(${Tomcata安装目录}\webapps)运行该web项目了。

使用ANT构建工具的简明教程 ANT是一个基于Java的构建工具,它提供了一种简单而强大的方式来自动化软件构建过程。本文将介绍ANT的基本概念和用法,并通过代码示例来演示如何使用ANT构建Java项目。在开始之前,您需要安装ANT。在您的项目根目录下创建一个名为build.xml的文件,并使用文本编辑器打开它。这只是ANT的基本用法介绍,ANT还提供了许多其他功能和任务,例如文件操作、测试、部署等。在build.xml文件中,首先需要定义您的项目。ANT将根据build.xml文件中的定义执行相应的任务和目标。是您要运行的目标的名称。 阅读详情

相关推荐

ant打包的build.xml文件

一个普通java程序用ant打包的列子,完整的,里面采用的是eclipse自带的编译插件进行的打包,需要结合eclipse中的插件一起使用

ANT简明教程[转载]

一、ant关键元素1. project元素    project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。1) name 属性    用于指定 project 元素的名称。2) defau

枫叶的专栏 668

AntTrafficSimulator_v1.02_Incl_LicGen_iND模拟交通的专用插件,提供各种的道路交通真实情况

AntTrafficSimulator_v1.02_Incl_LicGen_iND模拟交通的专用插件,提供各种的道路交通真实情况,是制作虚拟现实的好帮手!

代码构建(一)——ANT简介、安装部署

ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在实际软件开发中,有很多地方可以用到ant。Apache Ant(Another Neat Tool)是由Apache软件件基金会启动的一个开源项目。Ant是一个Java库和一个软件工具,用于自动化软件构建过程,如编译,运行,测试和组装Java应用程序。它由Apache软件基金会设计和开发,最初于2000年7月19日发布。它是Unix的Make构建工具的更好替代品。

weixin_40130409的博客 3383

OpenFOAM高效学习路线:如何用B站+东岳流体3个月掌握CFD仿真

本文分享了一套高效的OpenFOAM学习路线,结合B站视频、东岳流体教程和官方文档,帮助在职工程师在3个月内掌握CFD仿真技术。通过渐进式学习计划和案例训练,从基础到实战,快速提升独立建模能力。

weixin_29202213的博客 319

ArcGIS中利用DEM数据生成地形图既视感的等高线;利用掩膜进行等高线注记;DEM的可视化表达总结

文章目录前言一、效果图展示二、地形(DEM)可视化表达1.一维可视化2.二维可视化2.三维可视化二、ArcGIS中利用DEM数据制作等高线2.三维可视化2.三维可视化2.三维可视化2.三维可视化二、ArcGIS中利用DEM数据制作等高线2.三维可视化2.三维可视化2.三维可视化总结 前言 最近老师布置作业:DEM的可视化表达。想做一个等高线地形图那样、看起来高级一点的等高线,可是我看网上大多数教程都只展示了【等值线】工具,做出来效果都一般。我自认为自己做出来的效果还可以,把步骤分享给大家。 一、

pink_pig__的博客 5万+

ANT简明教程

一、ant关键元素 1. project元素 project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。 1) name 属性 用于指定 project 元素的名称。 2) def...

weixin_30326745的博客 94

【ELF2学习板】基于OpenMP与RK3588多核架构优化FFTW的并行计算效率

本文详细介绍了如何在ELF2学习板上利用OpenMP与RK3588多核架构优化FFTW的并行计算效率。通过编译支持OpenMP的FFTW库、合理设置线程绑定与调度策略,以及内存访问优化等技巧,显著提升了FFT计算的性能。实测数据显示,多核并行优化可使4096点FFT计算速度提升一倍以上,特别适合信号处理、图像分析等高性能计算场景。

weixin_30352645的博客 608

ant简明教程

一、ant关键元素 1. project元素     project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。 1) name 属性     用于指定 project 元素的名称。 2) default

代码的艺术 881

Keystone变换(4)MATLAB仿真

关于Keystone变换三种方法(DFT-IFFT法、Sinc插值法和Chirp-Z法)的仿真

qq_45846079的博客 1571

(功能安全六)硬件FMEDA计算

FMEDA(故障模式、影响与诊断分析)是功能安全验证的核心方法,通过量化分析硬件故障模式及其影响,计算SPFM、LFM、PMHF等关键指标。分析过程包含六大步骤:计算元器件失效率、识别故障模式、评估安全机制诊断覆盖率、分类计算各类失效率、量化指标计算及设计优化。输入需要系统架构图、硬件故障模式清单等资料,输出安全指标达标情况及改进建议,确保设计满足ASIL等级要求。该方法通过系统化的故障分类和量化评估,为硬件安全设计提供科学依据。

Dayongger的博客 1454

【ANT】Ant简明教程

【转载】Ant简明教程 一、Ant介绍   Ant是构建工具,用来实现软件的自动化的构建,类似于VisualStudio的project文件,Linux上构建C++的makefile,Ant通常用来构建Java程序。Ant是基于XML的文件,所以更容易阅读;Ant是用Java实现的,本身支持跨平台;Ant基于插件的方式开发,本身内置了常用的大部分的插件,而且第三方的扩展也很容易;A

kenkywu的专栏 1009

PoE 的三大国际标准:PoE、PoE+、PoE++

很多人知道 PoE 能“一根网线,既供电又传数据”,但鲜少有人能说清楚:PoE 供电到底分几种标准?差别有多大?哪些设备要用 PoE,哪些必须上 PoE+ 或 PoE++?今天,我们就来一次彻底的“拆解”,把 PoE 的三大国际标准——讲得明明白白,顺便也帮你厘清网络工程中的常见“供电疑惑”。

网络技术联盟站 1551
上一篇: Web 页面内容优化与性能优化技巧
下一篇: 101 个 MySQL 的调节和优化的提示
努力突破
博客等级 码龄17年 36粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值