2017-03-17 34 views
1

提供的依賴我有一個名爲「A」一個JAR的項目,有一些庫將由wildfly 10提供:使用具有繼承

<dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.core.version}</version> 
      <scope>provided</scope> 
     </dependency> 

我有一個名爲「B」的另一個項目,是一個WAR項目。這第二個項目不應該再次插入hibernate依賴關係,但是如果我不這樣做,我不能使用@Entity和其他類。我應該再次提供項目「B」中的「重新導入」hibernate-core。有什麼方法可以從項目「A」中繼承它?

回答

1

,但如果我不這樣做,我不能使用@Entity和其他類

我會鼓勵閱讀Dependency Scope in Maven周圍的文檔,你可以找到 -

提供:這非常類似於編譯,但表示您期望JDK 或容器到在運行時提供依賴項。例如,當 構建Java企業版的Web應用程序時,您將 將Servlet API和相關Java EE API的依賴性設置爲 ,因爲Web容器提供了這些類。此 作用域僅在編譯和測試類路徑上可用,並且 不可傳遞。

進一步回答您的問題

我應該「重新導入」休眠核心項目「B」爲再次提供 。有什麼方法可以從項目「A」中繼承它?

如果您使用的B工程相同的依賴,我建議將其納入項目B.依賴關係列表

此外,如果項目是緊耦合(在這個意義上,他們將總是使用相同版本的hibernate-core),您可以通過將範圍修改爲compile來使用現有的依賴關係,如默認情況下所使用的,如果您不提及。

的選擇仍然是在要實現設計,做閱讀本 -

Maven : Should I keep or remove declared dependencies that are also transitives dependencies?

雖然恕我直言,我更喜歡通過@ i000174做出的答案有專門爲在安全側和更好的控制。

+0

當您說「如果您在項目B中使用相同的依賴項,我會建議將它包含在項目B中的依賴項列表中。」在這種情況下,我應該把我提供的依賴關係放在戰爭項目中,對嗎? 當你說「你可以通過修改範圍來編譯使用現有的依賴關係」。我不明白這一點。 – RonaldoLanhellas