gpt4 book ai didi

maven - 如果它们来 self parent 的其他子模块,我应该依赖 Maven 中的传递依赖吗?

转载 作者:行者123 更新时间:2023-12-01 07:51:44 24 4
gpt4 key购买 nike

假设我们正在处理 抵押贷款子模块,我们直接使用Google Guava模块代码中的类,但依赖于 guava在同一父级下的其他子模块中定义,我们只能通过对“投资”模块的传递依赖来访问 Guava 类:

banking-system (parent pom.xml)
|
|-- investment (pom.xml defines <dependency>guava</dependency>)
|
|-- mortgage (pom.xml defiens <dependency>investment</dependency>)

我们还应该放一个 <dependency>前往 中的 Guava 抵押 pom.xml ?

缺点看起来像我们的 pom.xml 中的重复,优点是:如果有人开发“投资”会丢弃 Guava ,那么它不会阻止我们的抵押子模块成功构建。

如果是,那么 <version>我们应该指定? (无 + <dependencyManagement> 在父 pom 中?)

如果是,我们是否应该使用 <provided>那么在某个模块中的范围呢?

注意:请记住,我在特定情况下询问,当模块具有共同的父 pom 时(例如,作为一个整体的应用程序)。

也许这个结构不是最好的例子,想象一下:
banking-app
banking-core (dep.on: guava, commons, spring)
investment (dep.on: banking-core)
mortgage (dep.on: banking-core)

应该还是 Investment使用 @Component 时显式声明 Spring , 如果使用 Guava 的 LoadedCache 则声明 Guava ?

最佳答案

we are directly using the Google Guava classes in module code, but the dependcy for the guava is defined in other sub-module under the same parent and we have access to Guava classes only by transitive dependency on "investment" module [...] Should we still put a to Guava in the mortgage pom.xml?



,你应该在你的模块中声明 Google Guava 依赖,而不是期望它可以作为传递依赖。即使它适用于当前版本,但在以后的直接依赖版本中可能不再如此。

如果你的代码依赖于一个模块,你的代码应该只直接依赖于这个模块的类,而不是这个模块的传递依赖。正如您所提到的,不能保证投资模块将来会继续依赖 Guava。您需要在父级的 pom.xml 或模块本身中指定此依赖项,以确保它在不依赖传递依赖项的情况下可用。这不是重复,你怎么能告诉 Maven 你的模块依赖于 Guava?

我没有看到任何情况下您需要在其他情况下尊重最低限度的最佳实践。

If yes, then what <version> shoudle we specify? (none + <dependencyManagement> in parent pom?)



, 使用 <dependencyManagement>在父级中并使用 <dependency>在没有版本的子模块中最好:您将确保所有模块都使用相同版本的依赖项。由于您的模块作为一个整体是一个应用程序,因此它可能会更好,因为它可以避免各种问题,例如在类路径上存在相同依赖项的不同版本而造成破坏。

即使出于某种原因,使用相同父模块的模块之一需要不同版本的依赖项,仍然可以使用 <version> 覆盖此特定模块的版本。 .

If yes, should we use a scope in some module then?



可能不是 , 依赖于 compile范围是大多数包装方法的最佳选择。

然而您可能会遇到需要或喜欢这样做的情况,例如,如果所述模块需要使用运行时环境特定版本,或者您的部署或打包模型的设计方式需要它。鉴于您所暴露的情况,两者都是可能的,尽管大多数时候它不应该是必要的。

关于maven - 如果它们来 self parent 的其他子模块,我应该依赖 Maven 中的传递依赖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47260901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com