В проекте AI есть:
java {
registerFeature( 'solrSupport' ) {
usingSourceSet(sourceSets.main)
}
}
dependencies {
solrSupportApi 'my.group:foo:1.0'
}
В проекте BI есть:
// Version B.1
dependencies {
api 'my.group:project-a:1.0', {
capabilities {
requireCapability('my.group:project-a-solr-support')
}
}
}
При этом компиляция проекта B завершается неудачно, поскольку в нем отсутствуют solrSupportApi
зависимости (my.group:foo
) из проекта A.
Изменение сборки проекта B на один из приведенных ниже проектов компиляции успешно.
// Version B.2
dependencies {
api 'my.group:project-a:1.0'
}
// Version B.3
dependencies {
api 'my.group:project-a:1.0'
runtimeOnly 'my.group:project-a:1.0', {
capabilities {
requireCapability('my.group:project-a-solr-support')
}
}
}
Запуск gradlew dI --configuration compileClasspath --dependency foo
для проекта B для любого выше 3 версии выше показывают зависимость.
Я использую Gradle 6.2, и в настоящее время я тестирую с includeBuild
без фактического опубликования проекта A. Я использую https://docs.gradle.org/current/userguide/feature_variants.html в качестве руководства .
Как правильно объявить зависимости? На мой взгляд, версия B.1 должна работать, а версия B.2 не должна. Однако я вижу противоположное поведение. По умолчанию я не хочу, чтобы зависимости «solrSupport» были включены для потребителей проекта A.
Обновление 2020-02-24: С https://blog.gradle.org/optional-dependencies Я вижу, что зависимости должны быть указаны «дважды», но я не знаю, почему B.2 все еще работает. Разве не должно отсутствовать зависимость foo
?