2012-06-26 60 views
2

如果我在应用程序中包含一个库(例如mycompany.model.core-SNAPSHOT)(例如my.company.app),并且mycompany.model.core包含Hibernate作为依赖项,我可以引用Hibernate在my.company.app中的类和函数,而不包括应用程序中的hibernate(显式)?Maven传递依赖混淆

谢谢!

回答

3

你可以,但它不被认为是好的做法。

如果您需要类或接口放在类路径中以编译您的应用程序,则应该为其添加一个<dependency>。这可以防止对上游依赖项的更改(例如,如果您依赖的库切换到TopLink而不是Hibernate),并允许Maven注意到直接和间接依赖项的版本号是否不同步。

由于您同时控制库和应用程序工件,为什么不让它们都从共同的父项继承?pom.xml?然后你可以从一个地方管理你的依赖版本(例如你的Hibernate版本)。

+0

为什么它不被认为是“良好做法”?如果你使用指定版本的父pom,依赖关系仍然是集中的,我只是不想在后来的任何hibernate中使用hibernate,但我认为这是不切实际的。 –

+0

@SamLevin:在你的情况下,既然你控制了两个工件,我不认为这是一个问题。至于为什么它通常是最佳实践,我在我的答案中给出了一些理由。如果您需要更多,那么您可能需要发布后续问题以获得更多回复。 –