maven - 如何正确使用 Maven BOM-s?
问题描述
我已经很长时间没有这样做了,所以我似乎忘记了正确的做法。我想创建 BOM 文件,我想在一个<dependencyManagement/>
部分中定义一堆依赖项,然后不必将它们定义为我的项目中的依赖项。
有人可以澄清这是如何工作的吗?BOM 文件是否只是用于在 POM 文件中声明一组依赖项,然后可以使用无版本,类似于父项(除了您可以拥有任意数量的这些,只要您喜欢),还是您也可以让它为您声明依赖项?
例如,如果我的 BOM 有一个<dependencyManagement/>
部分,我是否还需要定义<dependencies/>
一个部分,如果我想让所有使用 BOM 的项目始终使用所有依赖项?在使用 BOM 的项目中,我在以下文件中定义了以下内容<dependencyManagement/>
:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>foo-bom</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
我是否仍然需要通过在要导入它们的 POM 中的显式声明来手动导入无版本依赖项?<dependencies/>
将它们定义为在 BOM 中(该部分之外)的正确方法是否也是正确的<dependencyManagement/>
?
解决方案
BOM 只是dependencyManagement。他们不能声明依赖关系。
它们有两个主要目的:
- 您可以添加无版本的依赖项(版本将来自 BOM)。
- 它们覆盖您拉取的传递依赖项的版本(这样即使您的依赖项拉取了一个古老的 log4j,您也可以确保您拥有最近的 log4j)。
如果你真的想添加一堆依赖,用这些依赖编写一个 POM 并将其添加为依赖。
推荐阅读
- javascript - 谷歌使用输入字段映射 API JS 多个标记?
- java - 是否可以在 XPages 中获取 Java 中的 getLocaleString() 值?
- ios - 生产环境只有iOS 9可以接收推送,为什么
- c# - 从 Roslyn CompilationUnitSyntax 获取嵌套类
- objective-c - 如何在 Objective-C 的 UITableView 附件视图中显示自定义图像?
- python - pandas dataframe - 两列字符串匹配和分组
- delphi - TeeChartVCLFMX-2018.24 和 Builder 10.2.2
- javascript - 从 poup ajax 获取 fancybox 调用
- javascript - jquery可拖动,拖动后查看div内容
- java - 如何修复位图上 getWidth() 中的空错误