Как правильно использовать варианты функций? - PullRequest
0 голосов
/ 20 февраля 2020

В проекте 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...