日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

使用Gradle构建Monorepo项目

發布時間:2023/12/3 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Gradle构建Monorepo项目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

根據Wikipedia的說法 , monorepo是一種軟件開發策略,其中許多項目存儲在同一存儲庫中。 這種策略可以快速檢測到因依賴關系的更改而導致的潛在問題和破壞,并且已被許多使用大型代碼庫的組織采用,例如Google,Facebook和Twitter。

如果碰巧將Gradle用作首選的構建工具,那么您也可以應用此策略,這要歸功于3.1版中引入的Composite Builds功能(在撰寫本文時,最新版本為5.0)。 讓我們看一下不使用此功能時的典型monorepo工作流程。

沒有復合建筑的生活

假設您剛剛在一家公司中工作,該公司的項目保存在單個存儲庫中。 每個項目都有一個單獨的構建,并且它們之間的唯一關系是通過相互依賴來滿足它們的需要。 有些項目比其他項目具有更多的依賴關系,有些項目甚至可能與其他項目沒有依賴關系。

項目數量很重要; 當價格較低時,您可以說所有這些工具都可以放在一個傘項目下,就像使用Maven及其反應堆功能所做的那樣。 Gradle具有類似的功能,除了在不觸發所有其他項目的情況下更輕松地定位特定的構建之外。 可以這樣說,Gradle的反應堆更智能,可以選擇要執行的目標。

但是,當項目數量超過一打,比如說幾百個時,會發生什么? 即使使用更智能的反應堆,Gradle也必須閱讀所有項目的配置,然后解決適當的目標。 這肯定會花費您寶貴的日常工作時間,這是很大的禁忌。

解決方案是將每個項目分解為單獨的版本。 反應堆功能已經一去不復返了,因此我們不必付出閱讀和配置所有項目的代價,以后再丟棄其中的大多數項目。 但是,現在當依賴項可能引入了錯誤或二進制不兼容時,我們失去了做出反應的機會,這是在monorepo中組織代碼的原因之一。

現在,我們必須遵循以前嘗試過的

  • 在依賴項項目上進行更改。
  • 構建工件并將其發布到存儲庫。 大多數人都依賴快照工件。
  • 確保從屬項目消耗了新發布的工件/快照。
  • 編譯并運行測試以確定代碼是否可以再次運行。
  • 沖洗并重復直到起作用。

這種方法的問題在于,我們浪費時間來發布中間工件,并且不時地形成表單,我們會忘記發布快照發行版,而在調試會話中花費數小時,直到我們意識到二進制文件不正確,呃。

復合材料為營救

現在讓我們看看Composite Builds如何解決我們所遇到的問題。我們首先查看以下項目及其之間的依賴關系

項目1

Project2 <–取決于— Project1

Project3 <–取決于— Project2

這個小的依存關系圖告訴我們,對Project1所做的任何更改都會影響Project2,進而影響到Project3,因為對Project2所做的更改也會影響Project3。 此monorepo的目錄結構如下所示

. ├── project1 │ └── build.gradle ├── project2 │ └── build.gradle └── project3└── build.gradle

在這里,我們可以看到三個項目及其各自的構建文件。 每個項目都有其自己的發布生命周期和版本,我們可以在其構建文件中觀察到

project1 / build.gradle

apply plugin: 'java'group = 'com.acme' version = '1.0.0'

project2 / build.gradle

apply plugin: 'java'group = 'com.acme' version = '2.3.0'dependencies {compile 'com.acme:project1:1.0.0' }

project3 / build.gradle

apply plugin: 'java'group = 'com.acme' version = '1.2.0'dependencies {compile 'com.acme:project2:2.3.0' }

激活“復合構建”功能需要在名為settings.gradle的文件中配置項目之間的鏈接。 項目2和3需要此文件,因此我們的存儲庫如下所示

. ├── project1 │ └── build.gradle ├── project2 │ ├── build.gradle │ └── settings.gradle └── project3├── build.gradle└── settings.gradle

接下來,我們像這樣寫下項目之間的鏈接

project2 / settings.gradle

includeBuild '../project1'

project3 / settings.gradle

includeBuild '../project2'

大。 完成此設置后,我們現在可以通過發出以下命令來構建project3

$ cd project3 $ pwd /tmp/project3 $ gradle classes > Task :processResources > Task :project2:processResources > Task :project1:compileJava > Task :project1:processResources > Task :project1:classes > Task :project1:jar > Task :project2:compileJava > Task :project2:classes > Task :project2:jar > Task :compileJava > Task :classes

如您所見,project1和project2均已構建。 對project1進行更改并再次觸發對project3的構建,將按預期構建所有三個項目。 現在,假設將此Monorepo擴展到數十個或數百個項目,您將很快意識到幾乎不需要快照版本(如果有)。 Gradle還具有其他功能,例如輸入/輸出的任務緩存,這也使構建更快。 同樣,最近宣布的構建緩存功能通過“捕獲” CI服務器場中其他節點計算的輸出來加快構建速度。

如果您喜歡本文,則可以在我的博客上找到有關Gradle和構建工具的其他有趣文章。

翻譯自: https://www.javacodegeeks.com/2018/12/building-monorepo-projects-gradle.html

總結

以上是生活随笔為你收集整理的使用Gradle构建Monorepo项目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。