假设Maven项目的依赖管理中列出了BOMFoo像这样:
<groupId>someGroup</groupId>
<artifactId>someArtifact-bom</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
但此 BOM 仅对子模块中的测试依赖项起作用。
<dependency>
<groupId>someGroup</groupId>
<artifactId>someArtifact</artifactId>
<scope>test</scope>
</dependency>
BOM 中声明的工件和 BOM 本身只能通过声明附加存储库来使用。
如果我创建一个新的 Maven 项目并声明依赖关系Foo它得到解决。
如果我定义了完全相同的依赖关系Foo在 Groovy 项目中
repositories {
mavenCentral()
}
dependencies {
implementation("myOrg:Foo:1.0")
}
解决失败并显示
- Could not resolve myOrg:Foo-parent:1.0.
- Could not parse POM <mvn-central>/myOrg/Foo-parent-1.0.pom:
- Could not find someGroup:someArtifact-bom:1.0-SNAPSHOT.
...因为它不存在于中央。
当然,如果可以从用户的项目访问,或者将 BOM 及其声明的工件放在中央,则可以通过添加存储库轻松解决此问题。
我想知道是否还有其他我想不出的方法来避免将来出现这个问题。依赖关系定义的排除不适用于 BOM。我可以理解这种行为,因为 BOM 不是real module.
只是为了完整性:正确解决后,我的项目中不存在有关 BOM 或其工件的依赖性。确实根本不需要。