Использование класса из файла .groovy, расположенного в другой папке (Gradle)

У меня есть этот файл build.gradle, который отлично работает:

class Utils  {
  def doit(){
    println "hi from utils"
  }
}

task hello << {
  def utils = new Utils()
  utils.doit();
}

Если я перемещу файл class/.groovy в подпапку следующим образом:

test
 -> groovy
     -> Utils.groovy
 -> build.gradle

и измените файл build.gradle на это:

dependencies {
    runtime fileTree(dir: 'groovy', include: '*.groovy')
}

task hello << {
  def utils = new Utils()
  utils.doit();
}

Класс Utils больше не может быть найден:

...unable to resolve class Utils

Я предполагаю, что подпапка groovy должна быть добавлена ​​как импорт/запись в путь к классам/зависимость в файле .gradle. Я прочитал эти страницы:

http://gradle.org/docs/current/userguide/dependency_management.html http://gradle.org/docs/current/userguide/custom_plugins.html http://gradle.org/docs/current/userguide/custom_tasks.html

но не удалось найти какие-либо документы, описывающие, как импортировать файлы .groovy в файл .gradle. Какую страницу я упустил, описывающую эту простую функциональность?


person u123    schedule 20.07.2012    source источник


Ответы (1)


Если вы измените свой build.gradle просто на

task hello << {
  def utils = new Utils()
  utils.doit();
}

Тогда вместо

test
 -> groovy
     -> Utils.groovy
 -> build.gradle

переместите файл Utils.groovy в buildSrc/src/main/groovy вот так:

test
 -> buildSrc
     -> src
         -> main
             -> groovy
                 -> Utils.groovy
 -> build.gradle

и gradle должен подобрать его автоматически.

См. раздел "41.4. Исходники сборки в проекте buildSrc" в документации. дальнейшая информация.

person tim_yates    schedule 20.07.2012
comment
Это работает. В результате создается папка .gradle и build с jar, отчетами, классами. Все это необходимо для импорта класса в файл .gradle? И можно ли указать этот путь в другом месте? - person u123; 20.07.2012
comment
Да, все это необходимо. (Но тогда, сколько это усилий?) Помните, что Groovy — компилируемый язык, поэтому класс должен быть скомпилирован и помещен в путь к классу сценария сборки до того, как сценарий сборки можно будет оценить. Классы должны идти под buildSrc или во внешнюю банку. Дополнительные скрипты сборки могут использоваться где угодно и могут быть включены в apply from: "path/to/script". - person Peter Niederwieser; 22.07.2012
comment
@PeterNiederwieser, а как вы обрабатываете импорт? когда я импортирую материал в buildscript {}, он работает в build.gradle, но я не могу разрешить исключения класса XXX при попытке использовать зависимость в пользовательских классах. - person sydd; 10.07.2015
comment
@sydd, похоже, вам нужно опубликовать вопрос ;-) - person tim_yates; 10.07.2015
comment
Я понял, решение состоит в том, что в папке buildSrc должен быть файл build.gradle, содержащий зависимости для скрипта сборки. - person sydd; 12.07.2015