У меня есть сложный скрипт Gradle, который включает в себя множество функций, связанных со сборкой и развертыванием ряда проектов netbeans в ряде сред.
Скрипт работает очень хорошо, но по сути он настраивается через полдюжины карт, содержащих информацию о проекте и среде.
Я хочу абстрагировать задачи в другом файле, чтобы я мог просто определить свои карты в простом файле сборки и импортировать задачи из другого файла. Таким образом, я могу использовать одни и те же основные задачи для нескольких проектов и настраивать эти проекты с помощью простого набора карт.
Может ли кто-нибудь сказать мне, как я могу импортировать один файл Gradle в другой аналогично задаче Ant? Я изучал документы Gradle до сих пор безрезультатно.
Дополнительная информация
После ответа Тома ниже я подумал, что постараюсь уточнить, что я имею в виду.
В основном у меня есть скрипт 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.
Итак, в этом примере tasks.gradle будет содержать весь общий код генерации задач, и он будет запускаться для проектов, определенных в главном файле build.gradle. Таким образом, tasks.gradle - это файл, который может использоваться всеми большими проектами, состоящими из ряда подпроектов с файлами сборки муравьев Netbeans.
apply from
сразу выполняет внешние задачи. Это может быть нежелательно в логике выполнения (т.е. я бы хотел выполнять задачи, когда захочу, а не сразу).apply from
немедленно выполняет внешние задачи. Не обманывайтесь. Внешние задачи настраиваются, а не выполняются.Ответы:
В версии 0.9 есть новая функция. Вы можете использовать
apply from: 'other.gradle'
команду.Прочтите мой вопрос о том же по адресу: Есть ли способ разделить / выделить общие части сборки Gradle
источник
Ответ на вопрос оказался в системе плагинов, где вы можете добавить желаемую функциональность в набор плагинов, которые могут быть хорошими файлами, расположенными в каталоге
buildSrc/src/main/groovy
. Плагины также могут быть объединены как Jar, хотя я этого не пробовал.Подробности здесь: Пользовательские плагины
источник
Что ж, трудно сказать, что вам лучше всего подходит, не просматривая файл сборки.
Я мог бы предположить, что настройка вашей среды как многопроектной сборки должна предоставить вам абстракцию, которую вы ищете.
В корне вашего проекта
build.gradle
вы определяете все, что касается вашего домена, а также то, что применяется ко всем вашим подпроектам:Корневой каталог проекта также может содержать
gradle.properties
файл, в котором вы определяете свойства, используемые вашими проектами:Затем в дополнительном файле из корня вашего проекта с именем
settings.gradle
вы фактически указываете на свои подпроекты:Каждый каталог подпроекта содержит
build.gradle
файл, содержащий только материалы, относящиеся к подпроекту.Независимо от того, вызываете ли вы
gradle
из корня проекта или каталога подпроекта, gradle автоматически рассмотрит все ваши определения, сделанные в различных файлах.Также обратите внимание, что никакая задача компиляции не будет выполняться для вашего корня проекта, пока вы не загружаете какой-либо плагин помимо плагина по умолчанию на корневом уровне.
источник