Maven是比較流行的java構(gòu)建工具,Maven的常見問題可能包括依賴沖突、緩存解析,以及構(gòu)建時間緩慢。為什么Maven構(gòu)建花費的時間比它應(yīng)該花費的時間更長,如何改進(jìn)。下面是對Maven緩慢構(gòu)建進(jìn)行故障排除的四個技巧。想要了解有關(guān)Maven的更多知識,可以報名參加java培訓(xùn)來學(xué)習(xí),在專業(yè)老師的教學(xué)指導(dǎo)下,你可以很快掌握Maven使用技能。
1. Maven中的并行構(gòu)建
默認(rèn)情況下,Maven不會利用硬件的全部功能。它按順序而不是并行地構(gòu)建所有模塊。但是,項目設(shè)置通常不要求是連續(xù)的。通常,您可以命令Maven分析項目,包括依賴關(guān)系圖,并在可能的情況下并行構(gòu)建項目。您可以指定用于構(gòu)建項目的確切線程數(shù),也可以使用參數(shù)的可移植版本,并根據(jù)計算機(jī)上可用的CPU指定線程數(shù)。
mvn -T 4 install -- will use 4 threads
mvn -T 1C install -- will use 1 thread per available CPU
core
雖然您的項目可能不容易并行構(gòu)建,但值得一試,速度可能會大大加快。默認(rèn)情況下,每個CPU核心使用一個線程。您的開發(fā)機(jī)器可能有多余的計算能力,加快構(gòu)建總是有用的。
2. 并行運行Maven測試
測試是構(gòu)建的一個方面,它可能對您的構(gòu)建速度有最大的影響。最常見的做法是在您只對構(gòu)建工件感興趣時禁用測試,但我們不能推薦這種非常規(guī)工程實踐。如果您真的打算在Maven構(gòu)建過程中跳過測試目標(biāo),那么大多數(shù)插件所尊重的最常見屬性是:-DskipTests=true。然而,您可以在不破壞反饋循環(huán)的情況下實現(xiàn)更快的構(gòu)建時間。在java培訓(xùn)中,會有關(guān)于Maven的使用技巧的課程,學(xué)好這些技巧,有助于更好地進(jìn)行開發(fā)項目,少出問題。
答案是并行運行測試。我們剛才討論的并行化技術(shù)在模塊級工作。如果您正在使用一個已建立的插件來運行測試,比如說Surefire,您還可以將其配置為在模塊內(nèi)并行執(zhí)行。并行運行測試可能會導(dǎo)致不必要的副作用,特別是當(dāng)它們糾結(jié)在一起并期望按特定順序執(zhí)行時。然而,這完全是另一回事,你應(yīng)該完全嘗試一下,看看它是否適合你,以及它能加速你的構(gòu)建速度。你可以在以后找出失敗的原因。
3. 僅構(gòu)建必要的模塊
您通常使用什么命令來構(gòu)建項目?答案是:
mvn clean install
清理Maven時,會刪除所有生成的工件、所有臨時文件,除了配置和簽入版本控制的文件。然后,它會再次生成這些文件的新副本。當(dāng)您遇到一個奇怪的緩存問題或一些您有但其他人無法復(fù)制的模糊錯誤時,它非常有用。
然而,這將需要額外寶貴的秒數(shù)和CPU周期來完成基本上不必要的重新創(chuàng)建現(xiàn)有文件的工作。相反,您通常想要做的是以增量方式構(gòu)建項目。通過java培訓(xùn)學(xué)習(xí),可以幫助你更好地了解Maven相關(guān)問題,提高開發(fā)效率。
假設(shè)您有一個多模塊項目,其中包含很少更改的公共核心模塊,以及您當(dāng)前正在開發(fā)的web界面。更改web界面模塊后,請嘗試運行以下命令:
mvn install -pl $moduleName -am
首先,我們刪除了對clean階段的隱式調(diào)用。這個項目很少需要清潔,所以我們不想一直這樣做。讓我們看一下剛才使用的Maven命令中其他選項的描述:
-pl-使Maven只構(gòu)建指定的模塊,而不是整個項目。
-am-使Maven了解我們的目標(biāo)依賴于哪些模塊,并構(gòu)建它們。
同時使用這些選項的結(jié)果是靈活性和速度的完美結(jié)合。我們知道我們通常使用什么模塊,如果我們更改了任何依賴項,它們也將被更新。同時,您的項目構(gòu)建的很大一部分將被跳過,因為它仍然是新的,不需要重建,或者因為它不是目標(biāo)模塊的一部分,也不會發(fā)揮作用。
4. 限制上網(wǎng)
如果你有時覺得Maven正在下載互聯(lián)網(wǎng),要知道你并不孤單!這是任何構(gòu)建系統(tǒng)、npm、gradle、sbt最常見的投訴之一。如果你能說出它的名字,你會驚訝于有多少人類已知的庫和可傳遞的依賴項需要在任意的、通常是最不合適的時間下載。然而,有一個簡單的選項可以讓Maven離線工作。
啟用脫機(jī)模式時,Maven在解析依賴項時不會連接到任何遠(yuǎn)程存儲庫。本地存儲庫中的所有jar文件仍然可用,因此不會破壞您的正常工作流程。因此,只需在mvn命令后面附加--offline或--o,Maven就不會試圖檢查您最喜歡的依賴項的新快照,也不會讓您等待網(wǎng)絡(luò)響應(yīng)。想要學(xué)習(xí)java更多知識和技能,可以考慮參加java培訓(xùn),有經(jīng)驗豐富的專業(yè)講師指導(dǎo)教學(xué),有緊跟市場需求的實時課程,可以讓你快速掌握這門技術(shù),節(jié)約時間,少走彎路。