2012-09-15 2 views
5

Я новичок в gradle и хотел бы получить доступ к моему artifactory репозиторию. Если я поместил все конфигурации в один скрипт сборки, сборка будет успешной. Вот соответствующие части моего build.gradle:Gradle: Невозможно настроить artifactory из внешнего скрипта сборки

allprojects { 
    apply plugin: 'java' 
    apply plugin: 'eclipse' 
    apply plugin: 'artifactory' 
} 

// ... 

buildscript { 
    repositories { 
     maven { 
      url 'http://repo.jfrog.org/artifactory/gradle-plugins' 
     } 

     maven { 
      url artifactory_contextUrl + 'plugins-release' 

      credentials { 
       username = artifactory_user 
       password = artifactory_password 
      } 
     } 
    } 

    dependencies { 
     classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '2.0.16') 
    } 
} 


artifactory { 
    contextUrl = artifactory_contextUrl 

    publish { 
     repository { 
      repoKey = 'libs-release-local' 
      username = artifactory_user 
      password = artifactory_password 
      maven = true 
     } 
    } 

    resolve { 
     repository { 
      repoKey = 'libs-release' 
      username = artifactory_user 
      password = artifactory_password 
      maven = true 
     } 
    } 
} 


dependencies { 
    // My dependencies ... 
} 

// Rest of the build script ... 

Теперь я хотел бы, чтобы вытащить Artifactory часть в отдельный Gradle сценарий для лучшей организации. Это то, где сборка идет не так. Совершенно неожиданно, я получаю следующее сообщение об ошибке, даже если я скопировать мой build.gradle в foo.gradle, и изменение build.gradle только содержать одну строку

apply from: 'foo.gradle' 

Ошибка

FAILURE: Build failed with an exception. 

* Where: 
Script '/path/to/my/project/foo.gradle' line: 5 

* What went wrong: 
A problem occurred evaluating script. 
> Plugin with id 'artifactory' not found. 

В Это не ошибка, может ли кто-нибудь объяснить это поведение apply from градации и предложить решение?

Спасибо

ответ

5

apply from часть обрабатывается после того, как сценарий сборки уже настроен, поэтому говорить Gradle где найти плагин с конкретным ID слишком поздно. Вы должны держать buildscript часть в сценарии, или положить его в init script:

apply from : 'http://link.to/my/gradle.script' 
+0

Может использовать пример того, как это будет работать в сценарий инициализации. Я попытался, но не смог запустить скрипт инициализации и правильно настроить вещи. –

+1

Ну, это именно то, о чем говорит раздел 60.5. Пример добавлен. – JBaruch

1

Вы также можете использовать полное имя класса для применения плагинов в вашем помощнике сценария:

buildscript { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
    dependencies { 
     classpath "com.adaptc.gradle:nexus-workflow:0.5" 
     classpath "org.jfrog.buildinfo:build-info-extractor-gradle:2.2.4" 
    } 
} 
apply plugin: org.jfrog.gradle.plugin.artifactory.ArtifactoryPublicationsPlugin 
apply plugin: com.adaptc.gradle.nexusworkflow.NexusWorkflowPlugin 

Обратите внимание, что Gradle не найдет плагины, если вы ставите кавычки вокруг имени класса, как обычно делали бы с именами плагинов.

Это, как я нашел имя класса для Artifactory плагина:

  1. Я скачал плагин, который был к счастью open source.

  2. Я искал имя плагина среди файлов и нашел artifactory-puplish.properties.

  3. Он содержал следующее свойства: implementation-class=org.jfrog.gradle.plugin.artifactory.ArtifactoryPublicationsPlugin

source of nexus-workflow имеет таких свойств не файл, так что я посмотрел вокруг, пока я не нашел

plugins-gradle-master/nexus-workflow/src/main/groovy/com/adaptc/gradle/nexusworkflow/NexusWorkflowPlugin.groovy