最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Maven官宣:干掉Maven和Gradle更強(qiáng)更快更強(qiáng)的新一代構(gòu)建工具來(lái)了

2023-07-03 14:28 作者:一起學(xué)chatGPT一起學(xué)ai  | 我要投稿



相信作為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ì):

  1. 運(yùn)行構(gòu)建的JVM不需要為每個(gè)構(gòu)建重新啟動(dòng)。
  2. Maven插件類的類加載器緩存在多個(gè)構(gòu)建中,插件jars只會(huì)被讀取和解析一次。
  3. 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)圖:



二、安裝

對(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)化還是很香的。



Maven官宣:干掉Maven和Gradle更強(qiáng)更快更強(qiáng)的新一代構(gòu)建工具來(lái)了的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
翁源县| 同德县| 襄汾县| 板桥市| 新平| 巧家县| 井研县| 昌平区| 专栏| 贵阳市| 探索| 高邮市| 泽库县| 江山市| 台北市| 响水县| 玛沁县| 嵊泗县| 达日县| 宁远县| 晋城| 双牌县| 德格县| 察隅县| 华坪县| 邢台县| 柳江县| 石家庄市| 射洪县| 临沂市| 都江堰市| 长沙县| 印江| 连云港市| 泸西县| 洪湖市| 庆阳市| 长治市| 亳州市| 保康县| 宜良县|