Как определить функцию во внешнем файле? - PullRequest
0 голосов
/ 25 апреля 2018

Я испытываю странное поведение gradle / groovy.

У меня есть bulid.gradle, который выглядит так:

def elastic(notation, projectName) {
   if (allprojects.find { it.name == projectName }) {
      println "adding project dependency on project $projectName"
      project(projectName)
   } else { 
      println "adding binary dependency on project $projectName"
      dependencies.create(notation)
   }
}

dependencies {
   elastic('my.group:myProject:1.0','myProject')
}

Эта функция возвращает бинарную зависимость, если ее нетпроект с именем myProject в противном случае он возвращает зависимость проекта.Но это не главное.Я часто использую эту функцию в разных проектах, и она хорошо работает.Но, чтобы избежать избыточного кода, я попытался экстернализировать эту функцию.Поэтому я поместил его в define_elastic_1.gradle и применил этот файл к моему build.gradle.Теперь это выглядит так:

apply from: "file://entw1/ENTWICKLUNG/GfOPGradleRepo/define_elastic_1.gradle"
dependencies{
    elastic('my.group:myProject:1.0','myProject')
} 

, но когда я делаю gradle build, он говорит

Could not find method elastic() for arguments [my.group:myProject:1.0, myProject] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

По моему мнению, эта функция должна быть связана с DependencyHandler , а не с Project , как предлагает @ opal

Например:

dependencies.ext.elastic = { notation, projectName ->
   // do stuff
} 
dependencies {
    elastic('my.group:myProject:1.0','myProject')
} 
0 голосов
/ 25 апреля 2018

Попробуйте определить функцию как замыкание и через ext в define_elastic_1.gradle:

ext.elastic = { notation, projectName ->
   if (allprojects.find { it.name == projectName }) {
      println "adding project dependency on project $projectName"
      project(projectName)
   } else {
      println "adding binary dependency on project $projectName"
      dependencies.create(notation)
   }
}
...