Глава 37. Плагин распространения.

На данный момент, плагин распространения является инкубационным. Пожалуйста, знайте, что DSL и другая конфигурация может поменяться в последних версиях Gradle.

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

37.1. Использование.

Чтобы использовать плагин распространения, включите следующее в ваш сборочный скрипт:

Пример 37.1. Использование плагина распространения

build.gradle

apply plugin: 'distribution'
	  

Плагин добавляет к проекту расширение с именем 'distributions' и типом DistributionContainer. Также он создает дистрибутив в расширении контейнера дистрибутивов с именем 'main'. Если ваша сборка выдает только один дистрибутив, останется только настроить его (или использовать значения по умолчанию).

Вы можете запустить 'gradle distZip', чтобы упаковать главный дистрибутив в zip-архив или 'gradle distTar' для создания файла tar. Чтобы создать оба типа архивов, просто запустите gradle assembleDist. Будут созданы файлы - '$buildDir/distributions/$project.name-$project.version.«расширение»'.

Вы можете запустить gradle installDist для сборки несжатого дистрибутива в '$buildDir/install/main'.

37.2. Задачи.

Плагин распространения добавляет следующие задачи к проекту:

Таблица 37.1. Плагин распространения - задачи
Имя задачиЗависит отТипОписание
distZip-ZipСоздает zip-архив с дистрибутивом.
distTar-TarСоздает tar-архив с дистрибутивом.
assembleDistdistTar, distZipTaskСоздает tar- и zip-архивы с дистрибутивом.
installDist-SyncСобирает дистрибутив и устанавливает его на текущей машине.

Для каждого дополнительного набора распространения, добавленного вами к проекту, плагин добавляет следующие задачи:

Таблица 37.2. Несколько дистрибутивов - задачи
Имя задачиЗависит отТипОписание
${distribution.name}DistZip-ZipСоздает zip-архив с дистрибутивом.
${distribution.name}DistTar-TarСоздает tar-архив с дистрибутивом.
assemble${distribution.name.capitalize()}Dist${distribution.name}DistTar, ${distribution.name}DistZipTaskОбъединяет все архивы дистрибутивов.
install${distribution.name.capitalize()}Dist-SyncСобирает содержимое дистрибутива и устанавливает его на текущей машине.
Пример 37.2. Добавление дополнительных дистрибутивов

build.gradle

apply plugin: 'distribution'

version = '1.2'
distributions {
    custom {}
}
	  

Этот кусок кода добавит следующие задачи к проекту:

  • customDistZip
  • customDistTar
  • assembleCustomDist
  • installCustomDist

Если имя проекта 'myproject' и версия '1.2', то запуск команды 'gradle customDistZip' создаст zip-файл с именем 'myproject-custom-1.2.zip'.

Запуск 'gradle installCustomDist' установит содержимое дистрибутива в '$buildDir/install/custom'.

37.3. Содержимое дистрибутива.

Все файлы в папке 'src/$distribution.name/dist' будут автоматически включены в дистрибутив. Вы можете добавить дополнительные файлы, настроив объект Distribution, который является частью контейнера.

Пример 37.3. Настройка основного дистрибутива

build.gradle

apply plugin: 'distribution'

distributions {
    main {
        baseName = 'someName'
        contents {
            from { 'src/readme' }
        }
    }
}

apply plugin:'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://some/repo")
        }
    }
}
	  

В примере выше, содержимое папки 'src/readme' будет включено в дистрибутив (вместе с файлами из папки 'src/main/dist', которые добавлены по умолчанию).

Свойство 'baseName' также может быть изменено. В результате, архивы дистрибутивов будут созданы с другим именем.

37.4. Публикация дистрибутивов.

Плагин распространения добавляет архивы дистрибутивов в качестве кандидатов для публикации артефактов по умолчанию. Если используется плагин maven, то zip-файл дистрибутива будет опубликован при запуске uploadArchives, если никакой другой артефакт не умолчанию не настроен.

Пример 37.4. Публикация основного дистрибутива

build.gradle

apply plugin:'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://some/repo")
        }
    }
}