一、Ant 简介&构建环境

Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。由Apache软件基金会所提供

构建ant环境:

1). 安装jdk,设置JAVA_HOME ,PATH ,CLASS_PATH

2). 下载ant 地址http://www.apache.org/

3). 设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录

4). 测试验证,开始-->运行-->cmd进入命令行-->键入 ant -v

二、目录说明

bin--是ant的程序运行入口,如果没有配置ANT_HOME的情况下,可以通过bin目录中的bat程序进行运行build任务。

etc--目录中存放的都是一些xsl的输出模板,创建一个加强的导出各种任务的XML输出,使你的build文件摆脱过时的警告

lib--目录中存放的是ant程序需要依赖的jar包

manual--目录是ant程序的帮助文档

三、Ant之build.xml配置详解

  • project

每个构建文件都有一个project标签,有以下属性: 
- default:表示默认的运行目标,这个属性是必须的。 
- basedir:表示项目的基准目录。 
- name:表示项目名。 
- description:表示项目的描述

  • property

类似于常量,可以供给build.xml中的其他标签使用。有两个特点: 
- 大小写敏感 
- 不可改变,谁先设定,之后的都不能改变。

  • target

任务,一个project标签下有一个或多个target标签,代表任务,任务间可以存在依赖关系。有如下属性: 
- name:用于标识,这个是必须的 
- depends:用来指定所依赖的任务。

- if:当属性设置时才执行该任务。


  • echo

控制台显示

  • MacroDef 

——“宏”,在Ant中是非常实用的,它的作用相当于java里面的为防止代码重复而提取的公共方法。

需要注意的是:

1、在整个build文件里,<macrodef>是和<target>平级的,上例中定义的<dealWithTestCases>若不将其放在<target>里面,执行Ant时,脚本会直接执行这部分的宏代码,而不会去执行<target>中定义的‘depands="base"‘依赖关系。
2、<macrodef>可以调用其他的<macrodef>,但不可以调用<target>;<target>可用调用<macrodef>,也可用调用其他<target>。

3、所有任务的特性通过@{}展开而不是${},它们可以随宏的每一次调用而改变,且只在宏定义程序块内部可用。

  • Record

record是Ant内置任务,用于监听当前构建过程,并将输出记录到文件。可以同时存在多个record,每一个record都对应一个文件,文件名做为record的唯一标识

属性
name: 与record关联的文件名。
action:record的行为,开始记录还是停止记录。首次调用record时,如果未设置此属性,则默认为start,如果后续调用未设置,则保留之前的状态。可选值为start、stop。
append:是否追加到文件,只有任务第一次调用时有效。可选值为yes、no,默认为no。
emacsmode:是否删除日志中的[taskname],默认为false。
loglevel:日志记录的级别,随着构建过程的进行,可以更改日志级别。

  • sequential

sequential是Ant内置任务,用于包含其他的ant任务,sequential是一个容器任务。嵌套的任务按照顺序执行,sequential的主要用途是支持在并行任务中顺序执行一个子集中的任务。sequential任务没有属性,除了ant任务之外,不支持任务嵌套元素。任何有效的ant任务都可以嵌入到sequential任务中。

参考1

参考2

官网使用手册(http://ant.apache.org/manual/

Ant扩展包:ant-contrib

四、Ant build.xml中classpath

1. classpath的设置
<property name="src" value="${basedir}/src/main/java" /> <!--定义CLASSPACH,编译时用到你外部加入的包-->
<path id="classpath">
  <pathelement location="${src}" />
<fileset dir="${lib}" includes="***.jar" />
<fileset dir="${tomcat.lib}">
<include name="jsp-api.jar"/>
  </fileset>
</path> 2.classpath的使用
<javac scdir="./src" destdir="./classes">
  <classpath refid="project.classpath"/>
</javac>

五、应用

应用1:Ant构建前先执行sql脚本

<?xml version="1.0" encoding="UTF-8"?>
<!-- =====================================================================
Author: ytliug
Date: 09/29/2018
===================================================================== -->
<project name="Database" default="ConnectOracle" basedir="">
<property name="oracleDriver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="oracleJar" location="WebContent\WEB-INF\lib\ojdbc5.jar" />
<property name="oracleUrl" value="jdbc:oracle:thin:@10.16.55.38:1521:v7rac"/>
<property name="oracleUser" value="zssys" />
<property name="oraclePassword" value="zssys123" />
<property name="encoding" value="UTF-8" />
<property name="oracleFile" value="oracle.sql" />
<target name="ConnectOracle">
<echo message="Initializing database... If error occurs,let it be." />
<sql driver="${oracleDriver}"
url="${oracleUrl}"
userid="${oracleUser}"
password="${oraclePassword}"
classpathref="classpath"
encoding="${encoding}"
onerror="continue"
autocommit="true"
print="true"
<transaction src="${oracleFile}"/>
<path>
<fileset dir=".">
<include name="data*.sql"/>
</fileset>
</path>
<!--transaction 和path两选一 --->
</sql>
</target>
</project>

需要注意的是,如果你的sql文件中写的是存储过程,一定要加后面两个属性:

delimiter="/"
delimitertype="row"

应用2:Ant实现sql脚本批量执行

Jenkins系列之-—08 自动构建之后实现SQL脚本批量执行

Jenkins系列之-—06 Ant构建的更多相关文章

  1. 【06】Jenkins:Gitlab 自动触发构建以及钉钉通知

    写在前面的话 在某些时候,我们希望能够实现这样一个功能,当用户提交东西到 gitlab 上的时候,希望它能够自动触发构建,发布到我们需要的环境. 目前我们内部有做类似的需求:产品提交原型到 gitla ...

  2. Jenkins系列——使用checkstyle进行代码规范检查【升级版】

    1.背景 在<Jenkins系列——使用checkstyle进行代码规范检查>一文中完成了ant实现代码规范检查的例子.但存在以下缺陷: 每个作业都需要配置一个不同的checkstyle ...

  3. Ant构建原理及build.xml文档描述

    最近在改写jmeter,用到ant构建,记录一下. Ant的概念Make命令是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant ...

  4. jenkins系列(11)-自动打tag升级篇

    很久以前,小怪分享过一篇jenkins自动打tag的文章(jenkins系列1--自动打tag),经过在项目实战和改进,我们升级了方案,现在和大家分享.,希望大家在工作中能够用起来. 使用步骤: 1. ...

  5. jenkins系列(9)--插件之Archive The Artifacts

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  6. Jenkins系列——使用SonarQube进行代码质量检查

    1.目标 之前已经写过一篇关于Jenkins和SonarQube的一篇博客<jenkins集成sonar>,本文在参考前文的基础上,做了详细的补充. 使用SonarQube进行代码质量检查 ...

  7. Jenkins系列之-—01 简介&新建任务

    一.Jenkins 简介 Jenkins是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目.l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安装-只要把 ...

  8. Ant 构建 Jmeter脚本报错详解

    在搭建Ant构建Jmeter脚本的时候,小组成员遇到了各种问题. 再这里总结一下,遇到类似问题的可以做个参考 1.提示 does not exist 解决方案: 出现这种的问题原因有很多. 先排除权限 ...

  9. 【Tomcat 源码系列】源码构建 Tomcat

    一,前言 这篇博客写于 12 月 12 日,从 github[1] 上 fork 了一份 tomcat 的源代码,clone 到了本地.最近想把 tomcat 的源代码分析一下,寒假的时候有完整的时间 ...

随机推荐

  1. dpkg: deb包的操作命令

    dpkg -i package.deb #安装包 dpkg -r package #删除包 dpkg -P package #删除包(包括配置文件) dpkg -L package #列出与该包关联的 ...

  2. EF知识和经验

    AsNoTracking提高查询性能 AsNoTracking的作用就是在查询的时候不做追踪,这样会查询的更快,但是这样做会有一个缺陷(不能对查询的数据做修改操作). var student2 = d ...

  3. 【bzoj4031】[HEOI2015]小Z的房间 矩阵树定理

    题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...

  4. [CODEVS1914] 运输问题(最小费用最大流)

    传送门 水题. 建图都不想说了 ——代码 #include <queue> #include <cstdio> #include <cstring> #includ ...

  5. foj Problem 2275 Game

    Problem D Game Accept: 145    Submit: 844Time Limit: 1000 mSec    Memory Limit : 262144 KB Problem D ...

  6. best corder MG loves gold

    MG loves gold  Accepts: 451  Submissions: 1382  Time Limit: 3000/1500 MS (Java/Others)  Memory Limit ...

  7. 【CF1027C】Minimum Value Rectangle(贪心,数学)

    题意:给定n根木棍,不允许拼接或折断,选择四根组成矩形,求所有合法矩形中周长平方与面积比最小的一个,输出拼成这个矩形的四根木棍 n<=1e6 思路:猜结论:答案必定从相邻的4根中产生 证明见ht ...

  8. watch watch watch the video! I got almost addicted. Oh what a fuck!!!!

    http://v.huya.com/play/574329.html#relate_vid=570467

  9. [LeetCode] Minimum Window Substring 散列映射问题

    题目: Given a string S and a string T, find the minimum window in S which will contain all the charact ...

  10. http协议相关面试题

    浏览器输入url按回车背后经历了哪些? 1.在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事? 1.首先,在浏览器地址栏中输入url,先解析url,检测 ...