2017-04-01 33 views
2

這裏是簡單的情況分解,我想知道如果我做這個最佳或如果有更好的約定。我爲了學習目的創建了一個虛擬項目。這是否複製了多模塊項目(即Spring)中的Maven依賴項?

我創建了一個多模塊Maven項目。簡單地說,父母POM與兩個同胞孩子POMS,一個是服務層,另一個是網絡層。

最終結果目標是在Web項目的目標文件夾中具有完整的WAR,我可以將其部署到Tomcat中。

這裏是我不清楚的地方: - 服務項目和Web項目都需要使用Spring。 Service項目需要使用Spring,因爲它是依賴注入的目的。我需要一個簡單的Dog類,並將它自動注入到DogService對象中。這一切工作正常。 - 然後我需要將DogService對象自動注入到Dog控制器中。 Dog控制器存在於多模塊結構中的Web項目中。這也可以正常工作,因爲我已經在Service項目的Web項目中聲明瞭一個依賴關係,因此所有的Service JARs都包含在Web項目的最終構建的WAR中。

1)是否有一種方法可以簡單地爲兩個子項目聲明Spring依賴項,而無需在每個子項POM.xml中聲明依賴項?我只是想確保我沒有複製資源。我相信這樣做的方法只是在Parent POM.xml中聲明依賴關係。

2)如果我做了上面的#1,這是創建項目的最佳方式嗎?實際上,WEB模塊是包含所有最終jar的模塊,實際上就好像SERVICE項目在Tomcat中一樣。就Tomcat'知道'而言,所有的東西都是一堆包含類的JAR文件,其中一些已經被寫入我的WEB模塊中,其中一些已經寫入了SERVICE模塊中,所有這些與JAR文件無關生產/ Tomcat環境。對或錯?

謝謝!

+0

如果這是新的開發,通常最好使用Spring Boot的獨立jar而不是部署到外部容器中。 – chrylis

回答

1

有沒有辦法簡單地聲明兩個子項目的Spring依賴項,而不必在每個子項目POM.xml中聲明依賴項?我只是想確保我沒有複製資源。我相信這樣做的方法只是在Parent POM.xml中聲明依賴關係。

Maven對依賴管理非常聰明,不會「複製」資源 - 它每次緩存每個依賴項*並管理類路徑,以便您使用的所有項目共享相同的jar文件。通常,在需要的模塊中聲明依賴關係;不要混淆模塊或,尤其是的父母,以避免偶爾重新指定依賴關係。這就像在日常通勤中拖運你的船拖車,因爲你偶爾會去湖邊。

請記住,依賴是傳遞,因此,如果service-module取決於spring-web(它真正的,或者是你垃圾郵件的依賴?),如果web-module取決於service-module它會在依賴拉也不必重複自己。

如果我做了上面的#1,這是創建項目的最佳方式嗎?不,它不是。對你的依賴關係極簡:如果你需要它,包含它,但不要「防禦地」添加依賴關係。這隻會增加你的部署速度並降低構建速度,並增加諸如版本不匹配等問題的機會。據Tomcat'知道',所有的東西都是一堆包含類的JAR文件,其中一些已經寫在了我的WEB模塊中,其中一些已經寫在了SERVICE模塊中,所有這些與生產/ Tomcat環境無關。對或錯?

大部分是錯誤的。在一場戰爭中,您的頂級項目(web-module)直接在歸檔中存在類,並且依賴項作爲jar文件嵌入到其中。但是,Tomcat確實並非區分了service-module和你的Spring和其他依賴。

更好的是仍然會使用Spring Boot的獨立jar和嵌入式容器特性--Boot會負責將需要的jar打包到一個不需要外部支持的單個可運行文件中。

*僅發佈依賴關係,但快照在此處不相關。

+0

對,Tomcat不區分。因此,因爲MY服務模塊類依賴於一些Spring類(如導入@autowired和其他特定於Spring的依賴項),所以我不明白我的Web模塊目標中是否只包含最終依賴項jar,或者它們是否可以還需要在服務模塊POM依賴中?因爲當我去編譯我的服務模塊,並且我沒有將Spring作爲依賴項時,它會拋出。這是我感到困惑的地方。在一個完美的最終結果中,我只是在我的Web模塊的WAR檔案中只有Spring依賴關係。 –

相關問題