gradle项目 构建_使用Gradle构建Monorepo项目
gradle項目 構建
根據Wikipedia的說法 , monorepo是一種軟件開發策略,其中許多項目存儲在同一資源庫中。 這種策略可以快速檢測到因依賴關系的更改而導致的潛在問題和破壞,并且已被許多使用大型代碼庫的組織采用,例如Google,Facebook和Twitter。
如果碰巧將Gradle用作您的首選構建工具,那么您也可以應用此策略,這要歸功于3.1版中引入的Composite Builds功能(在撰寫本文時,最新版本為5.0)。 讓我們看看不使用此功能時的典型Monorepo工作流程。
沒有復合建筑的生活
假設您剛剛在一家公司中工作,該公司的項目保存在單個存儲庫中。 每個項目都有一個單獨的構建,并且它們之間的唯一關系是通過相互依賴來滿足他們的需求。 有些項目比其他項目具有更多的依賴關系,有些項目甚至可能與其他項目沒有依賴關系。
項目數量很重要; 當價格較低時,您可以說所有這些工具都可以放在一個傘項目下,就像使用Maven及其React堆功能所做的那樣。 Gradle具有類似的功能,除了在不觸發所有其他項目的情況下更輕松地定位特定的構建之外。 在某種程度上,您可以說Gradle的React堆更智能,可以選擇要執行的目標。
但是,當項目數量超過一打,比如說幾百個時,會發生什么? 即使使用更智能的React堆,Gradle也必須閱讀所有項目的配置,然后解決適當的目標。 當然,這將花費您寶貴的日常工作,這是一個很大的禁忌。
解決方案是將每個項目分解為單獨的版本。 React堆功能已經一去不復返了,因此我們不必付出閱讀和配置所有項目的代價,以后再丟棄其中的大多數項目。 但是,現在當依賴項可能引入了錯誤或二進制不兼容時,我們失去了做出響應的機會,這是在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項目 構建
總結
以上是生活随笔為你收集整理的gradle项目 构建_使用Gradle构建Monorepo项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 键盘乘号快捷键(电脑键盘乘号快捷键)
- 下一篇: jsoup爬虫教程技巧_Jsoup V的