1. 程式人生 > >Jenkins系列之-—06 Ant構建

Jenkins系列之-—06 Ant構建

一、Ant 簡介&構建環境

Apache Ant 是由 Java 語言開發的工具

構建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 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指令碼批量執行