<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          更快的 Maven 來了!性能提升 300%!

          共 2394字,需瀏覽 5分鐘

           ·

          2021-12-31 18:32

          Maven經(jīng)常被拿來和Gradle做對(duì)比,最大的劣勢(shì)之一就是Maven構(gòu)建慢,GradleMaven構(gòu)建速度快2到10倍,而如今Maven也可以更快了。Apache Maven團(tuán)隊(duì)從GradleTakari(Maven生命周期優(yōu)化器)[1]中獲得靈感對(duì)Maven進(jìn)行了強(qiáng)化,衍生出 maven-mvnd[2]項(xiàng)目。

          簡單介紹

          mvnd并不是對(duì)Maven進(jìn)行了重構(gòu),而是內(nèi)置了Maven。它實(shí)際上是一個(gè)或者多個(gè)Maven守護(hù)進(jìn)程,用來執(zhí)行實(shí)際的構(gòu)建服務(wù)。一個(gè)守護(hù)進(jìn)程實(shí)例可以為來自mvnd客戶端的多個(gè)連續(xù)請(qǐng)求提供Maven構(gòu)建服務(wù)。當(dāng)沒有空閑的守護(hù)進(jìn)程時(shí)來支撐構(gòu)建請(qǐng)求時(shí),mvnd可以并行生成多個(gè)守護(hù)程序。

          使用GraalVM代替JVM

          mvnd之所以快是因?yàn)樗褂昧?strong style="line-height: 1.75em;">GraalVM替代了傳統(tǒng)的JVM,因此它啟動(dòng)更快,占用內(nèi)存更少,而且在實(shí)行構(gòu)建時(shí)不需要為每個(gè)構(gòu)建啟動(dòng)新的JVM。另外Maven插件在構(gòu)建時(shí)不再需要多次加載,而是緩存在多個(gè)構(gòu)建中。SNAPSHOT版本的Maven插件不會(huì)被緩存。

          支持JIT

          GraalVMJIT(Just In Time)實(shí)時(shí)編譯特性也被運(yùn)用到Maven構(gòu)建作業(yè)中。JIT可以大大降低編譯時(shí)間,在重復(fù)構(gòu)建過程中,JIT優(yōu)化代碼立即可用,也極大提高了構(gòu)建效率。

          并行構(gòu)建

          目前Maven 3的并行構(gòu)建(parallel builds)還是實(shí)驗(yàn)特性,而且要求使用的插件必須是線程安全的。而mvnd默認(rèn)就支持使用多個(gè)CPU內(nèi)核進(jìn)行并行構(gòu)建。當(dāng)然如果你的源代碼不支持并行構(gòu)建,也可以通過添加- T1 參數(shù)切換到串行構(gòu)建。

          簡單嘗試

          接下來簡單嘗試一下mvnd

          安裝

          目前mvnd已經(jīng)支持LinuxMacOSWindows平臺(tái)。你可以分別通過SDKMANHomebrewChocolatey這些包管理器進(jìn)行安裝。也可以直接去mvnd發(fā)行版?zhèn)}庫[3]下載對(duì)應(yīng)的二進(jìn)制進(jìn)行安裝。這里以Windows為例,我選擇Chocolatey安裝:

          choco?install?mvndaemon

          時(shí)間可能比較長一些。

          配置

          配置很簡單,只需要注意兩點(diǎn)

          • 如果不使用包管理器進(jìn)行安裝的話請(qǐng)確保mvndbin目錄關(guān)聯(lián)到PATH
          • 如果沒有配置或者不想配置JAVA_HOME環(huán)境變量的話請(qǐng)?jiān)?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">~/.m2/mvnd.properties中設(shè)置java.home以指定Java目錄,例如:java.home=C:\\AdoptOpenJDK\\jdk-8。已經(jīng)配置環(huán)境變量的請(qǐng)忽略該條。

          其它的配置項(xiàng)可參考mvnd配置[4]。

          使用

          安裝配置完畢后命令行執(zhí)行mvnd --version出現(xiàn)下列結(jié)果就表示安裝成功了。

          mvnd?--version
          mvnd?native?client?0.7.1-windows-amd64?(97c587c11383a67b5bd0ff8388bd94c694b91c1e)
          Terminal:?org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
          Apache?Maven?3.8.3?(ff8e977a158738155dc465c6a97ffaf31982d739)
          Maven?home:?C:\Program?Files\mvndaemon\mvnd-0.7.1-windows-amd64\mvn
          Java?version:?1.8.0_282,?vendor:?AdoptOpenJDK,?runtime:?C:\Program?Files\AdoptOpenJDK\jdk-8.0.282.8-hotspot\jre
          Default?locale:?zh_CN,?platform?encoding:?GBK
          OS?name:?"windows?10",?version:?"10.0",?arch:?"amd64",?family:?"windows"

          為了降低學(xué)習(xí)成本mvnd的方式和傳統(tǒng)Maven類似,mvn變成了mvnd,你也可以通過mvnd --help來查看完整的命令選項(xiàng)清單。

          說實(shí)話并行構(gòu)建就是快,簡直坐火箭一般。另外,控制臺(tái)輸出也優(yōu)化了。

          由于GraalVM的加持,這個(gè)工具很可能會(huì)延長Maven的生命,避免過早被Gradle拉開優(yōu)勢(shì)。對(duì)于我們來說,這個(gè)項(xiàng)目可以觀望一下,看看Apache Maven官方的進(jìn)一步動(dòng)作。

          參考資料

          • [1]Takari(Maven生命周期優(yōu)化器): http://takari.io/book/40-lifecycle.html
          • [2]maven-mvnd: https://github.com/apache/maven-mvnd
          • [3]mvnd發(fā)行版?zhèn)}庫: https://github.com/mvndaemon/mvnd/releases
          • [4]mvnd配置: https://github.com/mvndaemon/mvnd/blob/master/dist/src/main/distro/conf/mvnd.properties

          程序汪資料鏈接

          程序汪接的7個(gè)私活都在這里,經(jīng)驗(yàn)整理

          Java項(xiàng)目分享 最新整理全集,找項(xiàng)目不累啦 06版

          堪稱神級(jí)的Spring Boot手冊(cè),從基礎(chǔ)入門到實(shí)戰(zhàn)進(jìn)階

          臥槽!字節(jié)跳動(dòng)《算法中文手冊(cè)》火了,完整版 PDF 開放下載!

          臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開放下載!

          字節(jié)跳動(dòng)總結(jié)的設(shè)計(jì)模式 PDF 火了,完整版開放下載!


          歡迎添加程序汪個(gè)人微信 itwang005? 進(jìn)粉絲群或圍觀朋友圈

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  视频黄页在线 | 爱搞搞网站 | 青青草AV导航 | 香蕉久久国产AV一区二区 | 亚洲中文日韩无码 |