Ant學習

  • 2019 年 10 月 5 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/qq_37933685/article/details/80793624

個人部落格:https://suveng.github.io/blog/​​​​​​​

Ant學習筆記

1.簡介

Apache Ant是可以在命令行中執行一個作業系統構建和部署工具。

Apache Ant功能

  • Ant 是最完整的Java構建和部署工具。
  • Ant是平台無關的,可以處理特定平台的屬性,如文件分隔符。
  • Ant 可以用於執行特定任務的平台,例如使用「觸摸』命令修改文件的修改時間。
  • Ant 腳本使用的是純XML編寫的。如果你已經熟悉XML,你可以學習Ant 很快。
  • Ant擅長複雜的自動化重複的任務。
  • Ant 自帶的預定義任務的大名單。
  • Ant提供了開發自定義任務的介面。
  • Ant可以在命令行中很容易地調用,它可以與免費的和商業的IDE集成。

2.安裝

  • 確保將JAVA_HOME環境變數設置到安裝JDK的文件夾。
  • 下載的二進位文件從http://ant.apache.org
  • 使用Winzip,WinRAR,7-zip或類似工具解壓縮zip文件到一個方便的位置 c:folder.
  • 創建一個名為ANT_HOME,一個新的環境變數指向Ant的安裝文件夾,在 c:apache-ant-1.8.2-bin 文件夾。
  • 附加的路徑Apache Ant批處理文件添加到PATH環境變數中。在我們的例子是 c:apache-ant-1.8.2-binin文件夾。

3.構建文件

所有構建文件要求項目元素和至少一個目標元素。

XML元素的項目有三個屬性:

屬性

描述

name

The Name of the project. (Optional)

default

The default target for the build script. A project may contain any number of targets. This attribute specifies which target should be considered as the default. (Mandatory)

basedir

The base directory (or) the root folder for the project. (Optional)

一個目標是要作為一個單元運行的任務的集合。在我們的例子中,我們有一個簡單的目標消息給用戶。

目標元素具有以下屬性:

屬性

描述

name

The name of the target (Required)

depends

Comma separated list of all targets that this target depends on. (Optional)

description

A short description of the target. (optional)

if

Allows the execution of a target based on the trueness of a conditional attribute. (optional)

unless

Adds the target to the dependency list of the specified Extension Point. An Extension Point is similar to a target, but it does not have any tasks. (Optional)

4.屬性任務

Ant使用屬性元素,它允許你指定的屬性。這允許屬性從一個版本改變為另一個。或者從一個環境到另一個。

默認情況下,Ant提供了可以在構建文件中使用下列預定義的屬性

屬性

描述

ant.file

The full location of the build file.

ant.version

The version of the Apache Ant installation.

basedir

The basedir of the build, as specified in the basedir attribute of theproject element.

ant.java.version

The version of the JDK that is used by Ant.

ant.project.name

The name of the project, as specified in the name atrribute of theproject element

ant.project.default-target

The default target of the current project

ant.project.invoked-targets

Comma separated list of the targets that were invoked in the current project

ant.core.lib

The full location of the ant jar file

ant.home

The home directory of Ant installation

ant.library.dir

The home directory for Ant library files – typically ANT_HOME/lib folder.

5.屬性文件

直接在構建文件中設置屬性是好的,如果你使用的是少數屬性。然而,對於一個大型項目,是要存儲在一個單獨的屬性文件中。

存儲在一個單獨的文件中的屬性可以讓你重複使用相同的編譯文件,針對不同的執行環境不同的屬性設置。例如,生成屬性文件可以單獨維持DEV,TEST和PROD環境。

指定在一個單獨的文件屬性是有用的,當你不知道一個屬性(在一個特定的環境中)前面的值。這使您可以在屬性值是已知的其他環境進行構建。

沒有硬性規定,但一般屬性文件名為build.properties文件,並放在沿一側的build.xml文件。如build.properties.dev和build.properties.test – 你可以根據部署環境中創建多個生成屬性文件

構建屬性文件的內容類似於普通的Java屬性文件。他們每行包含一個屬性。每個屬性由一個名稱和一個值對來表示。名稱和值對由等號分開。強烈建議屬性標註了正確的注釋。注釋列出所使用的哈希字元。

6.數據類型

nt提供了一些預定義的數據類型。不要混淆,也可在程式語言中的數據類型,而是考慮數據類型的設置被內置到產品中服務。

下面是一個由Apache Ant的提供的數據類型的列表

文件集合

該文件集的數據類型表示文件的集合。該文件集的數據類型通常是作為一個過濾器,以包括和排除匹配特定模式的文件。

例如:

<fileset dir="${src}" casesensitive="yes">    <include name="**/*.java"/>    <exclude name="**/*Stub*"/>  </fileset>

在上面的例子中的src屬性指向項目的源文件夾。

在上面的例子中,文件集的選擇,除了那些包含在其中單詞「Stub」源文件夾中的所有java文件。在大小寫敏感的過濾器應用到文件集這意味著名為Samplestub.java一個文件不會被排除在文件集

模式集

一個模式集是一個模式,可以非常方便地篩選基於某種模式的文件或文件夾。可以使用下面的元字元來創建模式。

  • ? – 只匹配一個字元
      • 匹配零個或多個字元
  • ** – 匹配零個或多個目錄遞歸

下面的例子應該給一個模式集的用法的想法。

<patternset id="java.files.without.stubs">    <include name="src/**/*.java"/>    <exclude name="src/**/*Stub*"/>  </patternset>

patternset 可以用一個文件集重用如下:

<fileset dir="${src}" casesensitive="yes">    <patternset refid="java.files.without.stubs"/>   </fileset>

文件列表

在文件列表的數據類型類似設置,除了在文件列表中包含顯式命名的文件列表,不支援通配符的文件

文件列表和文件組的數據類型之間的另一個主要區別是,在文件列表的數據類型可應用於可能會或可能還不存在的文件。

以下是文件列表的數據類型的一個例子

<filelist id="config.files" dir="${webapp.src.folder}">    <file name="applicationConfig.xml"/>    <file name="faces-config.xml"/>    <file name="web.xml"/>    <file name="portlet.xml"/>  </filelist>

在上面的例子中webapp.src.folder屬性指向該項目的Web應用程式的源文件夾。

過濾器集

使用與複製任務篩選器集的數據類型,你可以匹配一個替代值的模式,所有的文件替換一定的文本。

一個常見的例子是附加版本號的發行說明文件,如下面的示例所示

<copy todir="${output.dir}">    <fileset dir="${releasenotes.dir}" includes="**/*.txt"/>    <filterset>      <filter token="VERSION" value="${current.version}"/>    </filterset>  </copy>

在上面的例子中output.dir屬性指向項目的輸出文件夾。

在上面的例子點releasenotes.dir屬性的發行說明的項目文件夾中。

在上面的例子中current.version屬性指向的項目的當前版本中的文件夾。

副本任務,顧名思義是用來從一個位置複製到另一個文件。

路徑

path 數據類型通常用來代表一個類路徑。在路徑項用分號或冒號隔開。然而,這些字元會被正在運行的系統的路徑分隔符替換一個運行時間。

最常見的類路徑設置為項目中的jar文件和類的列表,如下面的例子:

<path id="build.classpath.jar">    <pathelement path="${env.J2EE_HOME}/${j2ee.jar}"/>    <fileset dir="lib">        <include name="**/*.jar"/>    </fileset>  </path>

在上面的例子中env.J2EE_HOME屬性指向環境變數J2EE_HOME。

在上面的例子中的j2ee.jar屬性指向在J2EE基礎文件夾J2EE的jar文件的名稱。

7.打包和部署

根據項目需求來自己定義一個自動部署的構建工具。先用構建文件編譯後,打包成war包,然後配置一個容器,完成自動部署。以後就可以用ant 自定義的命令重新部署自己的項目。具體打包和部署方式看文末參考文獻。

8.Ant執行java程式碼

您可以使用Ant來執行java程式碼。在下面這個例子中,java類中取一個參數(管理員的電子郵件地址),並發送了一封電子郵件。

public class NotifyAdministrator  {    public static void main(String[] args)    {      String email = args[0];      notifyAdministratorviaEmail(email);      System.out.println("Administrator "+email+" has been notified");    }    public static void notifyAdministratorviaEmail(String email)    {        //......    }  }

下面是執行這個java類簡單的構建。

<?xml version="1.0"?>  <project name="sample" basedir="." default="notify">    <target name="notify">      <java fork="true" failonerror="yes" classname="NotifyAdministrator">        <arg line="[email protected]"/>      </java>    </target>  </project>

當執行構建時,它會產生以下結果:

C:>ant  Buildfile: C:uild.xml    notify:       [java] Administrator [email protected] has been notified    BUILD SUCCESSFUL  Total time: 1 second

在這個例子中,java程式碼做一個簡單的事情 – 發送電子郵件。我們也可以使用內置的Ant任務來做到這一點。不過,現在你已經得到了你的想法可以擴展你的構建文件來調用java程式碼執行複雜的東西,例如:加密你的源程式碼。

自由度極大

9.Ant Junit集成

¥ 我要打賞 作者:李嘉圖 Java技術QQ群:227270512 / Linux QQ群:479429477

JUnit 是基於Java常用的單元測試框架進行開發。它是易於使用和易於延伸。有許多JUnit擴展可用。如果你不熟悉Junit的,你應該從www.junit.org下載JUnit和閱讀JUnit的使用手冊。

本教程討論了關於執行使用Ant 的JUnit測試。Ant 通過這個簡單Junit 的任務變得簡單。

以下展示的是JUnit 任務的屬性。

Properties

描述

dir

Where to invoke the VM from. This is ignored when fork is disabled.

jvm

Command used to invoke the JVM. This is ignored when fork is disabled.

fork

Runs the test in a separate JVM

errorproperty

The name of the property to set if there is a Junit error

failureproperty

The name of the property to set if there is a Junit failure

haltonerror

Stops execution when a test error occurs

haltonfailure

Stops execution when a failure occurs

printsummary

Advices Ant to display simple statistics for each test

showoutput

Adivces Ant tosend the output to its logs and formatters

tempdir

Path to the temporary file that Ant will use

timeout

Exits the tests that take longer to run than this setting (in milliseconds).

讓我們繼續的Hello World fax web應用程式的主題,並添加一個JUnit目標。

下面的例子展示了一個簡單的JUnit測試執行

<target name="unittest">    <junit haltonfailure="true" printsummary="true">      <test name="com.yiibai.UtilsTest"/>    </junit>  </target>

上面的例子顯示的Junit對com.yiibai.UtilsTest JUnit類執行。運行上面會產生下面的輸出

test:  [echo] Testing the application  [junit] Running com.yiibai.UtilsTest  [junit] Tests run: 12, Failures: 0, Errors: 0, Time elapsed: 16.2 sec  BUILD PASSED

10.參考資料

易佰教程