10個使用Maven的有效提示

毫無疑問,Maven是Java生態系統中最流行的軟件項目構建自動化工具。長期以來,它已經取代了Ant,這歸功於一個更簡單和聲明性的項目管理模型,提供了依賴關係管理和解決方案,以及定義良好的構建階段,例如compile和test,以及對插件的支持,這些插件可以執行與構建、配置和部署代碼相關的任何操作。

10個使用Maven的有效提示

多年來,許多使用場景和命令對我在基於Maven的項目中非常有用。以下是一些有助於更有效地使用Maven的使用技巧。還有更多的東西,很明顯,人們每天都可以為一個特定的用例學習一些新的東西,但我認為這些是可以普遍應用的。這裡的重點是命令行使用、解決某個問題或簡化重複任務等方面。因此,您將不會發現像使用dependencyManagement來集中依賴關係,這是相當基本的,並且在最初組成POM時更多地使用。

1

獲取項目的依賴樹

這是一個不費腦筋的問題,但它是解決依賴相關問題的關鍵,例如使用錯誤的版本。它在dependency:tree目標maven-dependency-plugin。只需運行以下命令行即可顯示當前項目中使用的所有依賴項的樹(可選地使用less若要滾動結果,假設您正在處理一個足夠大的項目):

10個使用Maven的有效提示

注意,在像Eclipse這樣的IDE中,這種依賴關係的層次結構可以在POM編輯器中可視化。例如,在Eclipse中,它可以在POM編輯器的“依賴層次結構”選項卡上查看。

2

分析屬地

在POM中聲明項目實際使用的依賴項是很好的做法,而且通常您希望顯式聲明項目使用的依賴項,即使它們是過渡性。這使POM變得更乾淨,就像刪除未使用的導入併為您在Java代碼中使用的類型聲明這些導入一樣。

要做到這一點,要麼運行dependency:analyze目標作為一個獨立的命令:

10個使用Maven的有效提示

每當插件發現POM中聲明的未使用的依賴項或未聲明的已使用依賴項時,輸出中都會顯示警告。如果由於此原因需要引發構建失敗,則參數failOnWarning可以設置為true:

10個使用Maven的有效提示

另一種方法是使用dependency:analyze-only目標,它做同樣的事情,但它應該在構建生命週期中使用,也就是說,它可以集成到項目的POM中:

10個使用Maven的有效提示

3

在本地構建期間跳過測試

在開發機器上構建項目時,您可能希望跳過現有的單元測試和集成測試,這可能是因為您希望更快地構建代碼,或者因為您暫時不關心測試。也許你只想在你覺得你的提交的第一個草稿準備好接受測試之後才運行測試。請注意,這絕不應在構建並部署到生產環境或暫存環境的CI/CD機器上完成。

有兩個備選方案需要考慮:

1. 跳過測試的運行:你可以用mvn package -DskipTests=true。或者,您可以將該屬性縮短為-DskipTests.

2. 跳過測試的編譯和運行(不建議):你可以用mvn package -Dmaven.test.skip=true。你可以把財產縮短到-Dmaven.test.skip.

後者跳過了與測試相關的整個任務(編譯和運行測試),因此它可能使構建速度稍微快一些,但-DskipTests而是建議,因為它允許您檢測在編譯時破壞測試的更改。這通常很重要,因為早期發現和修復錯誤可能最終需要對主代碼中的更改進行重新迭代,或者進行一些重構以使代碼更易於測試。

考慮並行運行測試,如安全插件文檔。這是一個更好的長期解決方案,但代價是您應該確保並行測試是獨立的,不會導致併發問題,因為它們將共享相同的JVM進程。

4

調試單元測試

上述屬性由maven-插件,負責運行單元測試。在test構建生命週期的階段。有時,您不希望在IDE中調試失敗的測試,因為您和我一樣,並不總是相信IDE是使用新的更改運行測試。有時,您有一個命令行窗口,只想堅持它。在這種情況下,將一個屬性傳遞給插件,如下所示:

10個使用Maven的有效提示

這將導致插件偵聽端口5005上的遠程調試器。現在,你可以在IDE中配置遠程調試連接到偵聽插件並在調試模式下執行測試。

如果您需要對集成測試進行同樣的測試,只需使用以下屬性即可。-Dmaven.failsafe.debug相反。名稱來自maven-failsafe-plugin,負責運行集成測試。

5

運行特定測試

因此,您調試了一個失敗的測試並修復了這個失敗,現在,您希望重新運行它以確保它是成功的。若要告訴“盡命之火”只運行該特定測試,則test參數可以在命令行上傳遞:

10個使用Maven的有效提示

根據的文件test目標的插件,test參數可用於進一步控制要執行的特定測試方法:

10個使用Maven的有效提示

6

從項目中恢復生成

我猶豫不決是否包括這個,因為它看起來微不足道,Maven通常在構建失敗時將它指向用戶,但我認為它仍然值得列出。每當生成中發生錯誤,並修復它並希望重新運行生成時,選項-rf,後面跟著冒號和失敗模塊的名稱,可以用於從失敗模塊恢復生成,以避免重新構建已經成功構建的模塊:

10個使用Maven的有效提示

7

有效POM

與在您的多模塊項目中以不同級別導航多個POM文件和/或在依賴項本身中定義的POM文件不同,相反,一個簡單的命令可以顯示由當前POM的整個配置快照組成的有效POM,包括從父POM繼承的信息,例如屬性、插件、依賴信息和配置文件等屬性、插件、依賴關係信息和配置文件。

10個使用Maven的有效提示

在Eclipse中,可以通過單擊默認POM編輯器中標有“有效POM”的底部選項卡查看它。

8

構建特定模塊及其依賴關係

對於具有許多依賴模塊的多模塊項目,您可能希望顯式地指定要構建哪些模塊,而忽略其他模塊。例如,您只想構建一個或兩個與其依賴關係一起工作的模塊,而不是構建整個模塊列表。而不是僅僅做mvn clean install在聚合器POM中,可以使用-pl命令行選項。例如,只構建模塊db-impl,您可以執行以下命令:

10個使用Maven的有效提示

選擇-am,簡稱--also-make中的列表所需的項目。-pl.

9

配置JVM內存

在構建項目之前,Maven將分析其模塊層次結構,以構造一個依賴關係圖,該圖指定構建這些單獨模塊的順序。有時,這個分析步驟可能需要比分配給Maven的JVM進程的默認內存更多的內存,從而導致Java堆空間錯誤。若要配置這些內存設置,請將MAVEN_OPTS可以設置環境變量:

10個使用Maven的有效提示

10

調試Maven插件

由於Maven具有豐富的插件生態系統,而且開發自定義插件很容易,因此開發人員可能需要調試這些插件的問題。如果將插件的源代碼導入到IDE中,則可以在調試模式下使用mvnDebug可執行文件(例如:mvnDebug clean install),Maven將等待IDE中的遠程調試器附加到端口8000上。

11

結語

瞭解像Maven這樣的構建工具如何工作對於充分利用它是至關重要的,但是有些用例經常重複它們自己的地方,值得記住這些快速解決方案。如果您有任何其他提示,歡迎在下面的評論中讓我們知道!


分享到:


相關文章: