在我的項目中有一個實現接口的類。接口來自依賴關係。我有另一個依賴關係,它本身依賴於一個包含相同接口的jar,除了一個包含更多方法的版本;包含相同包接口的兩個罐不具有相同的groupId或artifactId。
編譯失敗,因爲編譯器抱怨我的項目中的類沒有實現所有的方法。我意識到這是因爲編譯器正在從錯誤的jar中取出接口引用。我的問題是,爲什麼maven使用來自傳遞依賴的接口而不是我在項目POM中明確提到的那個接口?我可以看到使用的jar出現在定義的早些時候(所以我想在classpath中也是如此),但我認爲在這些情況下,maven通過使用碰撞類/接口從依賴最短路徑Maven依賴項順序
這是依賴關係樹的一部分。 注意,這是grepped,但仍然可以看出,(實際使用的)相比,tomcat:servlet
(應使用的一個)
[[email protected] proj]$ mvn dependency:tree | grep servlet
[INFO] | +- javax.servlet:servlet-api:jar:2.4:compile
[INFO] +- tomcat:servlet:jar:4.0.6:compile
我使用Maven 3.0是樹更深0.4
tomcat:servlet:應該提供jar,不能編譯。您應該針對javax.servlet:servlet-api進行編譯,並在適當的版本上添加依賴項。 – OrangeDog