Зависит от нескольких конфигураций из одной и той же зависимости - PullRequest
0 голосов
/ 29 ноября 2018

Я разрабатываю плагин Gradle, который добавляет 3 конфигурации.one, two и three

Когда я использую этот плагин, я могу добавить зависимости к этим конфигурациям, а затем плагин использует эти зависимости определенным образом в зависимости от конфигурации.Это прекрасно работает в одном проекте, однако если в многопроектной сборке я вынужден добавить следующее, чтобы получить зависимости от моих зависимых проектов:

dependencies {
    one project(path: ':projectA', configuration: 'one')
    two project( path: ':projectA', configuration: 'two')
    three project( path: ':projectA', configuration: 'three')
}

Есть ли способ сделать такчто когда я объявляю зависимость от моего другого проекта, он автоматически включает три мои пользовательские конфигурации: one, two и three

В моем плагине я создаю задачу, которая использует различные конфигурации:

project.getTasks().create("my-task", MyTask.class, t -> {
    t.getOnes().setFrom(
        project.getConfigurations().getByName("one"));
    t.getTwos().setFrom(
        project.getConfigurations().getByName("two"));
    t.getThrees().setFrom(
        project.getConfigurations().getByName("three"));
});

1 Ответ

0 голосов
/ 29 ноября 2018

Может быть, метод DomainObjectCollection.whenObjectAdded может вам помочь.
Найдите документы здесь: https://docs.gradle.org/current/javadoc/org/gradle/api/DomainObjectCollection.html

Вы можете попытаться получить DependencySet из всех конфигураций вашего проекта, которыеявляется DomainObjectCollection, и назовите whenObjectAdded на нем, а затем проверьте, является ли то, что добавляется, вашим «projectA», и затем сделайте свое дело.

В качестве альтернативы, вы можете использовать project.afterEvaluate, а затемпоиск по всем зависимостям в данный момент времени.

В обоих случаях одна и та же проблема - получить коллекцию всех зависимостей и проверить их.

Примерно так может работать:

configurations.all().each {
    if (it.allDependencies.contains(project(path: ':projectA'))) {
        // do something
    }
}
...