2013-04-15 108 views
2

我是Maven的新手,我嘗試在我的項目中使用Maven和Spring,Hibernate。經過Spring和Hibernate的參考之後,我發現「沒有必要在POM.xml文件中爲這樣的Apache commons liberaries明確指定相關的自由度」。Maven是否需要顯式指定Spring/Hibernate所依賴的依賴關係?

我的問題是:如果項目的其他部分引用了Apache commons liberary,例如commons-io,那麼我應該在POM.xml文件中明確指定這種依賴關係嗎?

回答

1

您應該在項目使用的Maven中定義這些依賴關係。例如,即使某些庫依賴於commons-io,但是如果您的代碼需要這樣,那麼您應該直接在您的pom.xml中定義commons-io

您不應該擔心在您的定義庫中的依賴關係pom.xml中。 Maven會爲你做到這一點。

+0

那麼這是否意味着如果我寫的代碼直接引用common-io,它們應該在POM.xml中明確定義,即使Spring也可能依賴於common-io? – pengpenglin

+0

更進一步,如果我的代碼直接依賴的commons-io版本與使用的一個spring不同。 maven會做什麼?兩個版本都會被下載或選擇最新版本?謝謝 !! – pengpenglin

+0

是的第一條評論。第二條評論 - 如果版本衝突,Maven會自動選擇最新版本。 –

0

Maven用於避免必須運行依賴於其他JAR文件的JAR文件的問題。當然,你不必使用maven來做到這一點,但你應該。 Maven將自動下載所需的JAR文件的相關JAR文件。例如,hibernate-entity manager JAR文件有超過100個依賴關係,maven可以幫你完成工作。

無論如何,即使您將commons-io文件添加到maven項目的構建路徑/類路徑,然後更新項目配置,maven也會將其踢出。

0

您可以像mvnrepository.com網站提供一個lib名字,看看它取決於(例如看看一個叫節spring-webmvc庫的情況下,「這神器取決於......」)。這些依賴項(您的工件依賴於)稱爲transitive dependencies。你不必在你的pom.xml中指定這些,因爲maven會爲你解決它們。

0

爲了便於閱讀,您應該僅聲明模塊中依賴於的那些依賴關係,直接使用。您希望JUnit測試您的軟件,只聲明JUnit;你需要休眠來使用ORM,聲明休眠等等。剩下的給Maven。

大多數情況下,您應該說明您打算在要使用它的模塊中使用什麼。因此,如果您想在多個模塊中使用依賴關係,請考慮將其移入一個依賴關係管理塊中父POM,並從那裏引用它的模塊中,你想進去。

父pom.xml的

<dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

孩子的pom.xml

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
    </dependency> 
</dependencies> 

此區保證你的版本穩定性,並且仍然允許你通過查看它的pom(而不是遍佈整個地方)找出模塊的用途。