Учитывая, что в управлении зависимостями проекта Maven есть спецификация Foo , например:
<groupId>someGroup</groupId>
<artifactId>someArtifact-bom</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
, но эта спецификация вступает в действие только для тестовой зависимости в субмодуль.
<dependency>
<groupId>someGroup</groupId>
<artifactId>someArtifact</artifactId>
<scope>test</scope>
</dependency>
Артефакт, объявленный в спецификации и самой спецификации, доступен только путем объявления дополнительного репозитория.
Если я создаю новый проект 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.
... потому что он не существует в центральном.
Конечно, это можно легко решить, добавив репозиторий, если он доступен из проекта пользователя, или поместив спецификацию и его объявленные артефакты на центральном.
Интересно, есть ли другой подход, который я не мог бы придумать, чтобы избежать этой проблемы в будущем. Исключение из определения зависимости не работает для спецификаций. Я могу понять это поведение, потому что спецификация не является модулем real .
Просто для полноты: после правильного разрешения в моем проекте нет зависимости относительно спецификации или ее артефакта. Это действительно не нужно вообще.