Как я могу импортировать один скрипт Gradle в другой?
у меня есть сложный сценарий gradle, который обертывает нагрузку функциональности вокруг создания и развертывания нескольких проектов netbeans в нескольких средах.
скрипт работает очень хорошо, но по сути все это настроено через полдюжины карт, содержащих информацию о проекте и окружающей среде.
Я хочу абстрагировать задачи в другой файл, чтобы я мог просто определить свои карты в простом файле сборки и импортировать задачи из другого файла. В таким образом, я могу использовать одни и те же основные задачи для ряда проектов и настраивать эти проекты с помощью простого набора карт.
может ли кто-нибудь сказать мне, как я могу импортировать один файл gradle в другой, аналогично задаче Ant? Я просмотрел документы Градля безрезультатно до сих пор.
Дополнительная Информация
после ответа Тома ниже, я подумал, что попробую уточнить, что именно я имею в виду.
В основном у меня есть скрипт gradle, который запускает количество подпроектов. Тем не менее, подпроекты-это все проекты Netbeans и поставляются со своими собственными сценариями сборки ant, поэтому у меня есть задачи в gradle для вызова каждого из них.
моя проблема заключается в том, что у меня есть некоторые конфигурации в верхней части файла, например:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
затем я создаю такие задачи, как:
projects.each({
task "checkout_$it.shortname" << {
// Code to for example check module out from cvs using config from 'it'.
}
})
у меня есть много таких фрагментов генерации задач, и все они являются общими - они полностью зависят от конфигурации в проектах список.
Итак, что я хочу поместить это в отдельный скрипт и импортировать его в следующим образом:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above.
Итак, в этом примере задачи.gradle будет иметь весь общий код генерации задач и будет выполняться для проектов, определенных в основной сборке.файл gradle. Таким образом, задачи.gradle-это файл, который может использоваться всеми крупными проектами, состоящими из нескольких подпроектов с файлами сборки Netbeans ant.
3 ответов:
есть новая функция в 0.9. Вы можете использовать .
прочитайте мой вопрос о том же самом по адресу: есть ли способ разделить / разложить общие части Gradle build
ответ на вопрос оказался в системе плагинов, где вы можете добавить желаемую функциональность в набор плагинов, которые могут быть groovy файлы, расположенные в каталоге
buildSrc/src/main/groovy. Плагины также могут быть объединены в банку, хотя я этого не пробовал.подробности тут: Пользовательские Плагины
ну, трудно сказать, что вы лучшие, не видя вашего файла build.
я мог бы предположить, что создание вашей среды в качестве сборки нескольких проектов должно предоставить вам абстракцию, которую вы ищете.
в корне вашего проекта
build.gradleвы определяете все ваши доменные вещи, а также вещи, которые применяются к все ваш подпроекты:repositories { add(new org.apache.ivy.plugins.resolver.FileSystemResolver()) { name = 'destRepo' addIvyPattern( file( project.properties['repo.dest.dir']).absolutePath + '/[organisation]/[module]/ivys/ivy(-[revision]).xml') addArtifactPattern( file( project.properties['repo.dest.dir']).absolutePath + '/[organisation]/[module]/[type]s/[artifact](-[revision]).[ext]') descriptor = 'optional' checkmodified = true } ... } ... subprojects { sourceCompatibility = 1.5 targetCompatibility = 1.5 group = 'my.group' version = '1.0' uploadArchives { uploadDescriptor = true repositories { add rootProject.repositories.destRepo } } apply{ type my.group.gradle.api.plugins.MyPlugin } ... } dependsOnChildren()корневой каталог проекта может также содержать где вы определяете свойства, используемые вашими проектами:
buildDirName=staging repo.dest.dir=/var/repo ...затем в дополнительном файле из корня проекта с именем
settings.gradleвы фактически указываете на свои подпроекты:include 'my-first-component', 'my-second-component' ... project(':my-first-component').projectDir = new File(rootDir, 'path/to/first/component') project(':my-second-component').projectDir = new File(rootDir, 'path/to/second/component') ...каждый каталог подпроектов содержит
build.gradleфайл, содержащий только подпроектные материалы.независимо от того, если вы вызываете
gradleиз корневого каталога проекта или подпроекта gradle автоматически рассмотрит все ваши определения, выполненные в различных файлы.также обратите внимание, что ни одна задача компиляции не будет выполнена для вашего корня проекта, если вы не загружаете плагин за пределы плагина по умолчанию на корневом уровне.
Comments