2017-02-07 3 views
0

Я использую Gradle SSH Plugin для развертывания некоторых, но не всех подпроектов на двух разных удаленных машинах. Я хочу, чтобы настроить эти пультов в главном скрипте сборки, чтобы избежать дублирования, но не может применить плагин в соответствии с этим:Примените внешний плагин к подмножеству подпроектов

configure([ 
    project(':Subproject1'), project(':Subproject5'), project(':Subproject7') 
]) 
{ 
    buildscript { 
     dependencies { 
      classpath 'org.hidetake:gradle-ssh-plugin:2.4.2' 
     } 
    } 

    apply plugin: "org.hidetake.ssh" 

    ssh.settings { 
     user = getProperty('ssh.username') 
     identity = file(getProperty('ssh.identity')) 
     knownHosts = allowAnyHosts 
    } 

    remotes { 
     tomcat { 
      host = getProperty('ssh.hosts.tomcat') 
     } 
     jboss { 
      host = getProperty('ssh.hosts.jboss') 
     } 
    } 
} 

Gradle терпит неудачу с > Plugin with id 'org.hidetake.ssh' not found.

Все в порядке, если содержимое проекта закрыто для каждого проекта. Как я могу изящно решить эту проблему?

ответ

1

Угадай, как я не воспроизвел вашу проблему, но блок buildscript является особенным, поскольку он предварительно обработан перед обычным анализом файлов сборки, и я подозреваю, что его внутри блока проекта, как у вас, не будет Работа.

Вы пробовали переместить блок buildscript на корневой уровень в приведенном выше скрипте?

редактировать 1: старые Gradle форумов размещать обсуждение этого можно найти here

редактировать 2: добавление фрагмента кода в ответ на комментарий.

Чтобы устранить дублирование и определить только сказать репозитории ссылки в одном месте, можно использовать следующую схему:

buildscript { 
    ext.RepositoryConfigurator = { 
    maven { 
     credentials.username artifactoryReader 
     credentials.password artifactoryReaderPwd 
     url     artifactoryReaderUrl 
    } 
    jcenter() 
    mavenCentral() 
    } 

    ext.DependencyConfigurator = { 
    classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:1.2" 
    } 

    ext.ResolutionConfigurator = { 
    resolutionStrategy.cacheChangingModulesFor 60, 'minutes' 
    } 

    repositories    RepositoryConfigurator 
    dependencies    DependencyConfigurator 
    configurations.classpath ResolutionConfigurator 
} 

apply plugin: "some.plugin.requiring.above.classpath" 

gradle.rootProject { 
    buildscript { 
    repositories    RepositoryConfigurator 
    dependencies    DependencyConfigurator 
    configurations.classpath ResolutionConfigurator 
    } 
} 

gradle.allprojects { 
    buildscript { 
    repositories    RepositoryConfigurator 
    dependencies    DependencyConfigurator 
    configurations.classpath ResolutionConfigurator 
    } 
} 

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

Вышеприведенное из файла settings.gradle, поэтому оно может быть или не быть идеально подходящим, но должно продемонстрировать идею.

+0

Да, это работает, но добавление блока 'buildscript' в начало корневого файла требует от меня также объявления репозиториев - что я делаю через' allprojects', а затем игнорируется. – Jazzschmidt

+1

Что бы это ни стоило, вот древняя тема, где я задал более или менее этот вопрос на форумах по градле. Чтение потока может быть информативным: [can-we-provision-a-more-concise-of-of-centralization-repository-configurations] (https://discuss.gradle.org/t/could-we-provide -a-more-concise-way-of-centralizing-repository-configurations/563) –

+0

К сожалению, я заканчиваю в 'Невозможно изменить зависимости конфигурации ': classpath' после того, как он был разрешен.' строка 12. на самом деле - да, old - gradle 2.14. AHHHH Мне пришлось удалить «buildscript.dependencies DependencyConfigurator» из rootProject и allprojects ... теперь он работает –

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