1. 程式人生 > >Build tool(構建工具)

Build tool(構建工具)

軟件發布 font 依賴項 完成 特殊 工具 收集 details 自動化

what:

構建工具能夠幫助你創建一個可重復的、可靠的、攜帶的且不需要手動幹預的構建。構建工具是一個可編程的工具,它能夠讓你以可執行和有序的任務來表達自動化需求。假設你想要編譯源代碼,將生成的class文件拷貝到某個目錄,然後將該目錄組裝成可交付的軟件。

理解構建工具中組建的交互、構建邏輯和實際定義,以及輸入輸出的數據是非常重要的。

構建文件

構建文件包含了構建所需的配置信息、定義外部依賴,例如第三方類庫,還包含了以任務形式實現某個特殊目的的指令和它們的相互依賴關系。在通常情況下,會使用腳本語言來表達構建邏輯。這就是為什麽一個構建文件也叫做構建腳本的原因。

構建的輸入和輸出

一個任務會接受一個輸入,然後執行一系列步驟,最後產生一個輸出。某些任務也需不需要輸入,也不需要產生一個必要的輸出。在復雜的任務依賴關系中,也許會使用一個依賴任務的輸出作為輸入。例如,我們將源代碼文件作為輸入,將它們編譯為class文件,並組裝成可交付軟件作為輸出。編譯和組裝過程各表示一個任務。只有先編譯了源代碼,組裝可交付軟件才有意義。因此兩任務需要保證它們的順序。

構建引擎

構建文件的一步步指令或者規則集必須被翻譯成構建工具可以理解的內部模型。構建引擎會在運行時處理構建文件,解析任務之間的依賴,設置好執行做需要的全部配置。一旦內部模型建立好了,引擎就會按照正常的順序去執行一系列任務。某些構建工具還允許你通過API去訪問這個模型,以便運行時獲取構建信息。

構建管理器

依賴管理器用於處理你在build文件中聲明的依賴定義,從工件倉庫(例如,本地文件系統、一個FTP或者HTTP服務器)中解析它們,並使它們對項目可用。一來通常是指外部依賴,一種JAR文件形式的可重用類庫(例如,Log4j對日誌的支持)。該倉庫就像依賴的儲藏所,通過標識符和描述它們,例如名字和版本。一個典型的倉庫可以是HTTP服務器或者本地文件系統。許多類庫還依賴於其他類庫,這叫做傳遞依賴。依賴管理器可以通過存儲在倉庫中的元信息自動的解析傳遞依賴。但是一個構建工具並不要求提供這樣的依賴管理組件。

How:

1、靈活性

谷歌選擇Gradle作為Android官方構建工具 ; 不是因為構建腳本是代碼,而是因為Gradle以最基本的方式可擴展的方式建模。Gradle的模型還允許它用於C / C ++的本地開發,並且可以擴展到涵蓋任何生態系統。例如,Gradle的設計考慮了使用其Tooling API嵌入。

Gradle和Maven都提供了約定優於配置。然而,Maven提供了一個非常嚴格的模型,使定制變得乏味,有時甚至是不可能的。雖然這可以使任何給定的Maven構建更容易理解,但只要您沒有任何特殊要求,它也會使它不適合許多自動化問題。另一方面,Gradle是在充分授權和負責任的用戶的基礎上構建的

2、性能

縮短構建時間是最快速發貨的最直接方式之一。Gradle和Maven都采用某種形式的並行項目構建和並行依賴性解析。最大的區別是Gradle的工作避免和增量機制。使Gradle比Maven快得多的前3個功能是:

  • 增量 - Gradle通過跟蹤任務的輸入和輸出並僅運行必要的操作來避免工作,並且只處理在可能的情況下更改的文件
  • 構建緩存 - 使用相同的輸入(包括計算機之間)重用任何其他Gradle構建的構建輸出。
  • Gradle守護進程 - 一種長期存在的進程,可將構建信息保持在內存中“熱”。

Gradle與Maven性能比較中,這些和更多性能特性使Gradle在幾乎每種情況下的速度至少快兩倍(使用構建緩存的大型構建速度快100倍)

3、用戶體驗

Maven的任期較長意味著它通過IDE的支持對許多用戶來說更好。但是,Gradle的IDE支持繼續快速提升。例如,Gradle現在有一個基於Kotlin的DSL,可以提供更好的IDE體驗。Gradle團隊正在與IDE制造商合作,以更好地提供編輯支持 - 敬請關註更新。

雖然IDE很重要,但是大量用戶更喜歡通過命令行界面執行構建操作。Gradle提供了一個現代CLI,具有可發現功能,如“gradle tasks”,以及改進的日誌記錄和命令行完成

最後,Gradle提供了一個基於Web的交互式UI,用於調試和優化構建:構建掃描。這些也可以在本地托管,以允許組織收集構建歷史記錄並進行趨勢分析,比較構建以進行調試或優化構建時間。

4、依賴管理

兩個構建系統都提供了內置功能,可以解析來自可配置存儲庫的依賴關系。兩者都能夠在本地緩存依賴項並並行下載它們。

作為庫使用者,Maven允許覆蓋依賴項,但僅限於版本。Gradle提供可自定義的依賴項選擇替換規則,可以聲明一次並在項目範圍內處理不需要的依賴項。此替換機制使Gradle能夠一起構建多個源項目以創建復合構建

Maven具有很少的內置依賴範圍,它們在常見場景中強制使用笨拙的模塊架構,例如使用測試夾具或代碼生成。例如,單元測試和集成測試之間沒有分離。Gradle允許自定義依賴項範圍,從而提供更好的建模和更快的構建。

作為庫生產者,Gradle允許生產者聲明`api`和`implementation`依賴關系,以防止不需要的庫泄漏到消費者的類路徑中。Maven允許發布者通過可選的依賴項提供

總的來說,Gradle和Maven都是項目自動構建工具,編譯源代碼只是整個過程的一個方面,更重要的是,你要把你的軟件發布到生產環境中來產生商業價值,所以,你要運行測試,構建分布、分析代碼質量、甚至為不同目標環境提供不同版本,然後部署。整個過程進行自動化操作是很有必要的。

Why:

項目自動化對於團隊的成功是非常的重要的。如今,發布時間對於市場變得比以前更重要了。能夠以一種可重復、可持續的方式構建和交付軟件是關鍵。接下來看一看項目自動化所帶來的好處:

1.防止手動介入

不得不手動地執行每一步去實現和交付軟件是耗時且易於犯錯的。坦白地說,作為一個開發人員和管理員,比起編譯過程和拷貝文件,還有更重要的事情要做。我們都是人,難免會犯錯,而且手動加入還會占用你真正做實際事情的時間。軟件開發過程中的任何一步都是能夠且應該被自動化的。

2.創建可重復的構建

軟件的構建通常都是有預定義和有序的步驟。比如,你需要先編譯源代碼,然後運行測試,最後組裝可交付軟件。你將需要每天一遍又一遍的重復運行相同的步驟。這應該和按一下按鈕一樣簡單。無論是誰在運行該構建,構建過程的結果都應該是可重復的。

3.讓構建攜帶

你可以發現,能夠在IDE(集成開發環境)中運行的構建是非常有限的。首先,你必須將特定的產品安裝在機器上。其次,IDE也許只適用於某一種操作系統。一個自動化構建不應該依賴於特定的運行環境才能工作,無論是操作系統還是IDE。最佳的方式應該是,自動化任務從命令行運行,它允許你在任何時間和任何一臺想要運行構建的機器上運行。


---------------------
作者:Miss比巴蔔
來源:CSDN
原文:https://blog.csdn.net/perArther/article/details/52201987

Build tool(構建工具)