Как я могу импортировать один сценарий Gradle в другого?

У меня есть комплекс gradle сценарий, который оборачивает загрузку функциональности вокруг создания и развертывания многих netbeans проектов ко многим средам.

Сценарий работает очень хорошо, но в сущности он все настроен через полдюжины карт, содержащих и информацию о среде проекта.

Я хочу абстрагировать задачи далеко в другой файл, так, чтобы я мог просто определить свои карты в простом файле типа "build", и импортировать задачи из другого файла. Таким образом я могу использовать те же базовые задачи для многих проектов и настроить те проекты с простым набором карт.

Кто-либо может сказать мне, как я могу импортировать один gradle файл в другого, подобным образом к задаче Муравья? Я тралил документы Gradle напрасно до сих пор.

Дополнительная информация

После ответа Tom ниже, я думал, что попытаюсь разъяснить точно, что я имею в виду.

В основном у меня есть gradle сценарий, который выполняет много подпроектов. Однако подпроекты являются всеми проектами Netbeans и идут с их собственными сценариями сборки муравья, таким образом, у меня есть задачи в 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 является файлом, который может использоваться всеми крупными проектами, которые состоят из многих подпроектов с файлами типа "build" муравья Netbeans.

91
задан Anthony Roy 19 February 2010 в 12:07
поделиться

2 ответа

Ну, трудно сказать, что вам больше подходит, не видя вашего файла сборки.

Я могу предположить, что настройка среды как многопроектной сборки должна обеспечить вам абстракцию, которую вы ищете.

В корневом каталоге проекта 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()

Корневой каталог проекта может также содержать gradle. properties, где вы определяете свойства, используемые вашими проектами:

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 будет автоматически учитывать все ваши определения, сделанные в различных файлах.

Также обратите внимание, что для корня проекта не будет выполняться задача компиляции, пока вы не загрузите ни один плагин, кроме плагина по умолчанию на корневом уровне.

4
ответ дан 24 November 2019 в 06:50
поделиться

В версии 0.9 появилась новая функция. Вы можете использовать команду применить из: 'other.gradle' .

Прочтите мой вопрос о том же: Есть ли способ разделить / выделить общие части сборки Gradle

122
ответ дан 24 November 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: