Jenkins基础篇 系列之-—06 Ant构建
一、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
二、详细介绍
2.1 目录说明
bin--是ant的程序运行入口,如果没有配置ANT_HOME的情况下,可以通过bin目录中的bat程序进行运行build任务。
etc--目录中存放的都是一些xsl的输出模板,创建一个加强的导出各种任务的XML输出,使你的build文件摆脱过时的警告
lib--目录中存放的是ant程序需要依赖的jar包
manual--目录是ant程序的帮助文档
2.2 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任务中。
2.3 Ant之命令行
命令行选项总结:
ant [options] [target [target2 [target3] ...]]
Options:
-help print this message
-projecthelp print project help information
-version print the version information and exit
-quiet be extra quiet
-verbose be extra verbose
-debug print debugging information
-emacs produce logging information without adornments
-logfile file use given file for log output
-logger classname the class that is to perform logging
-listener classname add an instance of class as a project listener
-buildfile file use specified buildfile
-find file search for buildfile towards the root of the filesystem and use the first one found
-Dproperty=value set property to value
官网使用手册(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"