SlimFast Maven外掛:HubSpot避免SpringBoot肥胖巨大JAR的方法
在現代Java Web開發中,構建和部署胖JAR大型檔案可能存在明顯的缺點。HubSpot工程團隊建立了一篇精彩的部落格文章,解釋了他們在將大型胖JAR持續部署到AWS雲時,內部開發迴圈和網路頻寬使用帶來的一些挑戰。
該部落格解釋了團隊最初如何使用Maven Shade外掛來構建和打包應用程式,但這使得一個應用程式包含70個類檔案 - 在原始JAR中總計210 KB,不包含任何依賴項 - 轉換為150多MB大小的肥胖Jar。使用Shade將100,000多個檔案合併到一個存檔中也是一個緩慢的過程,然後當構建伺服器將生成的JAR複製並部署到AWS S3儲存服務時,這會消耗時間和網路資源。HubSpot團隊擁有100名工程師,每天不斷提交併觸發1,000-2,000次構建,這種情況得到了放大。他們每天產生50-100 GB的構建工件!
HubSpot團隊最終建立了一個新的Maven外掛:SlimFast。這個外掛與Shade外掛的不同之處在於它將應用程式程式碼與相關的依賴項分開,因此構建並上傳兩個單獨的工件。單獨構建和上載應用程式依賴項可能聽起來效率低下,但只有在依賴項發生更改時才會執行此步驟。由於依賴項不經常更改,HubSpot團隊宣告此步驟通常是無操作; 包依賴關係的JAR檔案只上傳到S3一次。
HubSpot部落格文章和相應的GitHub儲存庫提供了全面的詳細資訊,但實際上,SlimFast外掛使用Maven JAR外掛向Skinny JAR新增一個Class-Path清單條目,指向依賴項的JAR檔案,並生成一個JSON檔案有關S3中所有依賴項工件的資訊,以便以後可以下載這些工件。在部署時,HubSpot團隊會下載所有應用程式的依賴項,但隨後會在每個應用程式伺服器上快取這些工件,因此這一步驟通常也是無操作。最終結果是在構建時只上傳了應用程式的瘦小JAR,這只是幾百千位元組。在部署時,只需要下載相同的瘦JAR,這需要幾分之一秒。
SlimFast外掛目前與AWS S3繫結用於儲存工件,但程式碼可在GitHub上獲得,其原理可適用於任何型別的外部儲存。
相關文章
- Maven 外掛Maven
- Maven的常用外掛Maven
- Maven自定義繫結外掛目標:建立專案的原始碼jarMaven原始碼JAR
- Maven--外掛Maven
- maven外掛配置Maven
- MybatisGenerator的Maven外掛配置MyBatisMaven
- Maven配置 Jetty 外掛MavenJetty
- maven Multiple sourceDirectory外掛Maven
- Maven打包springboot框架的可執行的jarMavenSpring Boot框架JAR
- Maven-Maven整合的tomcat7外掛MavenTomcat
- Maven外掛開發教程Maven
- Maven Assembly外掛介紹Maven
- Maven外掛執行方式Maven
- 【曹工雜談】詳解Maven外掛除錯方法Maven除錯
- 【Maven實戰技巧】「外掛使用專題」Maven-Archetype外掛建立自定義maven專案骨架Maven
- maven的外掛才是真正的執行者Maven
- Maven 專案引入本地 jar 包方法MavenJAR
- maven工程載入外部jar檔案的方法MavenJAR
- Maven外掛生成myBatis逆向工程MavenMyBatis
- Maven生命週期和外掛Maven
- Lombok編譯器Maven外掛Lombok編譯Maven
- [Maven]檢視某外掛的全部功能Maven
- 【Maven實戰技巧】「外掛使用專題」Maven-Assembly外掛實現自定義打包Maven
- 《SpringBoot篇:002》《SpringBoot的三種啟動方式:main、Maven、jar》Spring BootAIMavenJAR
- Apache Maven Assembly自定義打包外掛的使用ApacheMaven
- 測試外掛maven-surefire-pluginMavenPlugin
- vertx外掛使用vertx-maven-pluginMavenPlugin
- 常用Maven外掛介紹(轉載)Maven
- 【乾貨】常用maven外掛總結Maven
- 使用maven外掛構建docker映象MavenDocker
- nukkit maven 專案除錯外掛Maven除錯
- Maven 教程(21)— maven-compiler-plugin 外掛詳解MavenCompilePlugin
- maven下載jar包下載不下來的解決方法MavenJAR
- 使用Maven外掛構建SpringBoot專案,生成Docker映象push到DockerHub上MavenSpring BootDocker
- Myeclipse 10/2014 配置外掛(svn、maven、properties、velocity)的方法EclipseMaven
- MyBatis逆向工 maven外掛 generator 的配置及使用MyBatisMaven
- 使用Maven的assembly外掛實現自定義打包Maven
- Jib使用小結(Maven外掛版)Maven