微服務項目maven編譯很慢
Ⅰ 引入swagger項目無法正常啟動--微服務環境下
1.問題描述:
使用alibaba微服務體系搭建的項目,模塊管理使用的maven,給項目引入swagger做介面文檔,啟動時報錯,報錯信息如下:
2.問題解決
升級guava版本為20.0以上。
3.問題排查思路
首先,查看錯誤日誌,錯誤日誌中英文的大體翻譯為,「嘗試調用了一個不存在方法,發生的位置在 類中,下面這個方法不存在,可能方法存在....,guava-19.0.jar包中"
然後從錯誤日誌中我們就可以分析出,由於guava-19.0這個jar引起的,並且報出的錯誤是某個方法不存在,那麼我們就可以考慮到是這個jar的版本太低了,但是和swagger有什麼關系那?那這個時候我們可以想到swagger有沒有使用guava,打開編譯器,查看swagger的包依賴關系:
使用idea的可以這樣操作,右側---》maven--->選中需要分析依賴的項目---》maven最上方有個show depenceies--->然後打開下面這張圖--》左上角有個有 show conflicts--》紅線就是有沖突的依賴--》放大就會發現如第二張圖 swagger也依賴了guava,並且要求20.0的版本。
4.根本原因
maven的父子模塊包依賴機制導致,父子項目依賴關系如下:
我們的項目就是在 父項目中引入的swagger,裡面的swagger自己引入了20.0以上版本的guava使用,但是我們在子項目中又添加了如下依賴:
導致父項目的guava版本被覆蓋成了19.0的低版本,所以無法找到swagger使用的某個方法了。
Ⅱ 如何使用 Maven 搭建 Spring Boot 父子項目
使用 Maven 搭建 Spring Boot 父子項目的步驟如下:
創建父項目:
- 使用 Maven 命令行工具創建一個新的 Maven 項目作為父項目。
- 在父項目的 pom.xml 文件中,設置 <packaging> 標簽的值為 pom,這表示該項目是一個父 POM 項目。
- 在父項目的 pom.xml 中定義公共的依賴管理,包括 Spring Boot Starter 依賴等。這些依賴不會被父項目直接引入,但會被子項目繼承。
創建子項目:
- 在父項目的根目錄下,為每個微服務創建一個新的 Maven 子模塊。
- 每個子模塊的 pom.xml 文件需要引用父項目的 pom.xml,通過 <parent> 標簽指定父項目的坐標。
- 在子項目的 pom.xml 中,根據需要引入具體的 Spring Boot Starter 依賴和其他必要的依賴。這些依賴將自動繼承父項目中定義的版本,從而避免版本沖突。
構建和管理項目:
- 使用 Maven 的多模塊構建功能,可以在父項目的根目錄下執行 Maven 命令來構建所有子項目。
- 通過在父項目的 pom.xml 中定義構建插件和配置,可以簡化構建和部署過程。
- 當需要更新依賴版本時,只需在父項目的 pom.xml 中更新相應的依賴版本,所有子項目都會自動繼承並使用新的版本。
重點內容: 父項目:設置為 <packaging>pom</packaging>,管理公共依賴。 子項目:通過 <parent> 標簽引用父項目,繼承父項目的依賴管理。 構建:在父項目根目錄下執行 Maven 命令,構建所有子項目。
按照這些步驟,你可以使用 Maven 搭建一個結構清晰、依賴管理方便的 Spring Boot 父子項目。