2017-03-17 35 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