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任務中。
官網使用手冊(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"