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