<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官宣:超越Maven和Gradle!推出更強(qiáng)更快更牛逼的新一代構(gòu)建...

          共 2938字,需瀏覽 6分鐘

           ·

          2022-01-29 08:11

          點(diǎn)擊“開(kāi)發(fā)者技術(shù)前線”,選擇“星標(biāo)”

          讓一部分開(kāi)發(fā)者看到未來(lái)

          f05fe17fbc368c1e38f5b2533ec74931.webp

          來(lái)源:網(wǎng)絡(luò)

          相信作為Java開(kāi)發(fā)者的你早已經(jīng)受夠了maven的編譯緩慢,但是又由于歷史包袱、使用習(xí)慣等問(wèn)題暫時(shí)切換不了其他更快的構(gòu)建工具,這里筆者將給你介紹一款更快的maven——maven-mvnd。

          一.介紹

          maven-mvnd是Apache Maven團(tuán)隊(duì)借鑒了Gradle和Takari后衍生出的更快的構(gòu)建工具。mvnd內(nèi)嵌了Maven,也正是因?yàn)檫@個(gè)原因我們可以無(wú)縫地將Maven切換為mvnd(也不需要單獨(dú)安裝Maven)。

          在設(shè)計(jì)上,在mvnd中會(huì)生成一個(gè)或多個(gè)的守護(hù)進(jìn)程來(lái)服務(wù)構(gòu)建請(qǐng)求以此來(lái)達(dá)到并行構(gòu)建的效果。另外在VM的選擇上,mvnd使用了GraalVM來(lái)代替?zhèn)鹘y(tǒng)的JVM,與之相比GraalVM啟動(dòng)速度更快,占用的內(nèi)存更少。

          根據(jù)文檔描述,與傳統(tǒng)的Maven相比mvnd具有以下優(yōu)勢(shì):

          • 運(yùn)行構(gòu)建的JVM不需要為每個(gè)構(gòu)建重新啟動(dòng)。
          • Maven插件類的類加載器緩存在多個(gè)構(gòu)建中,插件jars只會(huì)被讀取和解析一次。
          • JVM中JIT生成的本機(jī)代碼會(huì)被保留。與Maven相比,JIT編譯花費(fèi)的時(shí)間更少。在重復(fù)構(gòu)建期間,JIT優(yōu)化的代碼立即可用。這不僅適用于來(lái)自Maven插件和Maven內(nèi)核的代碼,也適用于來(lái)自JDK本身的所有代碼。

          默認(rèn)情況下,mvnd使用多個(gè)CPU內(nèi)核并行構(gòu)建模塊。使用的內(nèi)核數(shù)由公式Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)給出。如果您的源代碼樹(shù)不支持并行構(gòu)建,請(qǐng)?jiān)诿钚猩蟼鬟f-T1以使您的構(gòu)建串行。

          同時(shí)官方給出了24核機(jī)器上運(yùn)行的動(dòng)態(tài)圖:d6f10d98f2bb548c74e734a185ed47f9.webp

          二.安裝

          對(duì)于mvnd的安裝,官方文檔給了十分詳細(xì)的教程,建議先行閱讀:https://github.com/apache/maven-mvnd 。

          筆者是通過(guò)Homebrew進(jìn)行安裝的,實(shí)踐證明macOS m1安裝使用是沒(méi)有問(wèn)題的。不過(guò)需要注意的是通過(guò)此種方式安裝的mvnd版本為0.7.1,而經(jīng)過(guò)在ubuntu和macOS m1上進(jìn)行測(cè)試發(fā)現(xiàn)此版本并不支持JDK8(可能僅是筆者電腦問(wèn)題),而通過(guò)官方例子所示的JDK11確是沒(méi)問(wèn)題。在JDK8運(yùn)行mvnd命令會(huì)產(chǎn)生以下錯(cuò)誤:

          ~?%?mvnd?-v
          Error:?A?JNI?error?has?occurred,?please?check?your?installation?and?try?again
          Exception?in?thread?"main"?java.lang.UnsupportedClassVersionError:?org/mvndaemon/mvnd/client/DefaultClient?has?been?compiled?by?a?more?recent?version?of?the?Java?Runtime?(class?file?version?55.0),?this?version?of?the?Java?Runtime?only?recognizes?class?file?versions?up?to?52.0
          at?java.lang.ClassLoader.defineClass1(Native?Method)
          at?java.lang.ClassLoader.defineClass(ClassLoader.java:757)
          at?java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
          at?java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
          at?java.net.URLClassLoader.access$100(URLClassLoader.java:74)
          at?java.net.URLClassLoader$1.run(URLClassLoader.java:369)
          at?java.net.URLClassLoader$1.run(URLClassLoader.java:363)
          at?java.security.AccessController.doPrivileged(Native?Method)
          at?java.net.URLClassLoader.findClass(URLClassLoader.java:362)
          at?java.lang.ClassLoader.loadClass(ClassLoader.java:419)
          at?sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
          at?java.lang.ClassLoader.loadClass(ClassLoader.java:352)

          預(yù)估應(yīng)該是這種方式下載的執(zhí)行文件是通過(guò)高版本的JDK編譯的,在低版本上運(yùn)行因?yàn)槿鄙倌承┓椒ɑ蛱匦运赃\(yùn)行不了。在一籌莫展之際,筆者從maven-mvnd的最新版本的更新說(shuō)明上發(fā)現(xiàn)一個(gè)Closed issues:Different java versions for mvnd and maven #512,在該問(wèn)題上作者提供了一種解決方案就是將JAVA_HOME所指定的版本設(shè)置為JDK11,并且在運(yùn)行mvnd命令時(shí)加上參數(shù)-Dmaven.compiler.release=8,即

          mvnd?-Dmaven.compiler.release=8?compile

          通過(guò)這種方式即能生成出JDK8所對(duì)應(yīng)的編譯代碼。

          對(duì)于issue #512中作者回應(yīng)mvnd的最低支持版本是JDK8,但是筆者從0.5.2開(kāi)始嘗試還是報(bào)同樣的錯(cuò)...或許是筆者電腦存在一定的問(wèn)題,因?yàn)槲铱吹狡渌嗽谫N出的結(jié)果圖顯示JDK8下最新版本也是能夠安裝并使用的。另外如果還是不行的話也許我們能夠通過(guò)手動(dòng)編譯源碼來(lái)生成可執(zhí)行文件,具體步驟在官方readme上已經(jīng)給出相應(yīng)的步驟。

          三.使用

          在使用上與Maven的用法是完全相同的,只需將命令mvn改為mvnd即可。而在筆者本機(jī)的實(shí)測(cè)中,與傳統(tǒng)的Maven相比,通過(guò)mvnd的構(gòu)建所耗費(fèi)的時(shí)間是原來(lái)的1/2。

          四.總結(jié)

          本文筆者分別從maven-mvnd的介紹、安裝、使用及其出現(xiàn)的一些異常情況展開(kāi)陳述,如果讀者想知道更多細(xì)節(jié)可閱讀官方文檔。而也許強(qiáng)化后的Maven依然比不過(guò)Gradle,但是在歷史包袱、使用習(xí)慣等背景下Maven的這次強(qiáng)化還是很香的。

          —??—

          點(diǎn)這里??關(guān)注我,記得標(biāo)星呀~

          前線推出學(xué)習(xí)交流一定要備注:研究/工作方向+地點(diǎn)+學(xué)校/公司+昵稱(如JAVA+上海

          掃碼加微信,進(jìn)群和大佬們零距離



          END

          后臺(tái)回復(fù)“電子書(shū)”?“資料”?領(lǐng)取一份干貨,數(shù)百面試手冊(cè)等你開(kāi)發(fā)者技術(shù)前線 ,匯集技術(shù)前線快訊和關(guān)注行業(yè)趨勢(shì),大廠干貨,是開(kāi)發(fā)者經(jīng)歷和成長(zhǎng)的優(yōu)秀指南。
          歷史推薦程序員喜歡的 5 款最佳最牛代碼比較工具

          12個(gè)非常適合做外包項(xiàng)目的開(kāi)源后臺(tái)管理系統(tǒng)

          愛(ài)奇藝如何治理數(shù)據(jù)和質(zhì)量監(jiān)控的?


          好文點(diǎn)個(gè)在
          瀏覽 69
          點(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>
                  国产又黄又湿 | 成人无码五月天 | 91av巨作在线 | 日逼91 | 日韩啪啪啪啪 |