2015-03-31 3 views
1

Say я определяю плагин, например, так:Устраивать или переопределять конфигурации градиента?

import org.gradle.api.artifacts.dsl.RepositoryHandler 
import org.gradle.api.artifacts.repositories.MavenArtifactRepository 
import org.gradle.api.Project 
import org.gradle.api.Plugin 

class MyRepos implements Plugin<Project> { 
    static final String NEXUS_URL = 'http://nexus.mine.com/nexus/content/repositories/' 
    static final List<String> NEXUS_REPOS = [ 
     'central', 
     'build', 
     'snapshots', 
     'release-candidates', 
     'releases', 
    ] 

    void apply(Project project) { 
     project.repositories { 
      NEXUS_REPOS.each { 
       maven { 
        url (NEXUS_URL + it) 
       } 
      } 
      mavenLocal() 
     } 
     project.buildscript { 
      repositories { 
       maven { 
        url (NEXUS_URL + 'central') 
       } 
       mavenLocal() 
      } 
     } 
    } 
} 

и в местном build.gradle, я пишу

apply plugin: MyRepos 

buildscript { 
    dependencies { 
     ... 
    } 
} 

Мое желание для двух секций buildscript быть объединены таким образом, что хранилищами определены в плагине и зависимостях в build.gradle, но, похоже, что локальное объявление переопределяет плагин, и я получаю сообщение об ошибке «no repositories defined».

Если я делаю это с помощью инсталляции конфигурации из верхнего уровня build.gradle, то результат такой же?

Может быть правильным решением для плагина чтобы обеспечить закрытие внутр для определения useMyRepos() аналогично тому, как mavenCentral() используется ...

ответ

1

Обычно конфигурационные элементы в Gradle объединены, так что вы можете применять конфигурации в разных местах. Вы можете, например, настроить некоторые зависимости в одном скрипте сборки, который будет применен к другому скрипту сборки, который добавит дополнительные зависимости.

Однако ваш случай немного отличается, поскольку вы используете конфигурацию buildScript, которая может быть использована для определения зависимостей самого скрипта сборки, а не корневого узла repositories, который предназначен для определения зависимостей проекта. строить.

В этом случае, согласно Purpose of buildScript in Gradle, так как это разные конфигурации, вам нужно будет определить свою зависимость дважды.

+0

Возможно, зависимости объединены, я не тестировал это, но, похоже, содержимое 'buildscripts' и' repositories' не объединено. Мне все еще нужно проверить, верно ли это для инсталляции конфигурации. –

+0

Вы можете сначала попробовать два сценария (один применит другой, используя 'apply from'). У Gradle могут быть разные правила для разных типов объектов или для слияния плагинов и скриптов. –

+0

Ok - сделал еще несколько исследований и в соответствии с [Назначение buildScript в Gradle] (http://stackoverflow.com/questions/13923766/gradle-buildscript-dependencies), поскольку блок «buildscript» предназначен для определения зависимостей для сам сценарий сборки, в то время как «репозитории» предназначены для определения зависимостей проекта, который вы создаете, тогда в этом случае два узла репозитория не будут объединены. –

Смежные вопросы