天天看點

如何提高maven的編譯速度

作為java開發都有這樣的體會:打包一個項目需要等很久。今天我們就研究一下如何提升mvn的編譯速度。

1)Parallel Builds in Maven:

預設Maven不使用硬體的全部功能,它順序地建構所有子產品。通常,可以指令Maven分析您的項目(包括依賴關系圖),并在可能的情況下并行建構項目。可以指定用于建構項目的确切線程數,也可以使用參數的可移植版本,并根據計算機上可用的CPU來指定線程數。

  • mvn -T 4 install -- will use 4 threads
  • mvn -T 1C install -- will use 1 thread per available CPU core

盡管您的項目可能難以并行建構,但值得嘗試。每個CPU核心使用一個線程是一個很好的預設設定。您的開發機器可能具有備用的計算能力,加快建構過程始終很有用。

2)Build Necessary Modules Only:

假設有一個多子產品項目,該項目包含很少更改的通用核心子產品,以及目前正在使用的網絡界面。更改Web界面子產品後,請嘗試運作如下指令:mvn install -pl $moduleName -am

  • -pl - makes Maven build only specified modules and not the whole project.
  • -am - 使Maven找出目标子產品所依賴的子產品并進行建構

一起使用這些選項的結果是靈活性和速度的完美結合。我們知道我們通常在使用哪個子產品,并且如果我們更改了任何依賴關系,它們也會被更新。同時,您的項目建構中的很大一部分将被跳過,要麼是因為它仍然是最新的并且不需要重建,要麼是因為它不是目标子產品的一部分,并且不會發揮作用。

3)限制上網:

所有建構系統(npm,gradle和sbt)都會聯網下載下傳一些内容。可以啟用一個簡單的選項,使Maven脫機工作。啟用脫機模式後,Maven在解決依賴關系時将不會連接配接到任何遠端存儲庫。本地存儲庫中的所有jar檔案仍将可用,是以不會破壞您通常的工作流程。是以,隻需在您的mvn指令後加上--offline,Maven就不會試圖檢查您最喜歡的依賴項的新快照,也不會讓您等待網絡響應。

如果您不希望它脫機,但擁有不可靠的網絡連接配接,則可以嘗試設定:-DdependencyLocationsEnabled = false為MAVEN_OPTS變量。這種增加意味着Maven将在整個建構過程中保留較少的傳出連接配接,并且可能還會縮短建構過程的幾秒鐘。

4)提高java啟動速度:

Maven是一個Java程式,可以調整使JVM的啟動速度更快(考慮到我們不會處理長時間運作的應用程式伺服器程序,為了確定以後的更快執行速度,這是安全的,我們可以為您推薦以下兩個選項)

-XX:+TieredCompilation -XX:TieredStopAtLevel=1

我們隻是讓您的JVM僅執行代碼的基本即時編譯。它不會嘗試收集更精确的配置檔案并更好地優化代碼的執行。這樣做的好處是,JIT不需要那麼多資訊,并且經過優化的代碼實際上有機會在建構之後就開始使用。請注意,該建議僅是理論上的建議,如果您可以嘗試并提出您的項目是否能從中受益,我将非常高興。

總結:

MAVEN_OPTS= -XX:+TieredCompilation -XX:TieredStopAtLevel=1
mvn -T 1C install -pl $moduleName -am --offline