Глава 53. Плагин приложений.

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

Применение плагина приложений неявно применяет плагин Java. Набор исходников main в сущности 'приложение'.

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

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

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

Пример 53.1. Использование плагина приложений

build.gradle

apply plugin: 'application'
	  

Одна обязательная настройка плагина - указание основного класса (то есть входной точки) приложения.

Пример 53.2. Установка основного класса приложения

build.gradle

mainClassName = "org.gradle.sample.Main"
	  

Вы можете запустить приложение, выполнив задачу run (тип: JavaExec). Она скомпилирует основной набор исходников и запустит новую JVM с его классами (вместе с их зависимостями времени выполнения) в пути к классам, используя указанный основной класс. Вы можете запустить приложение в отладочном режиме командой gradle run --debug-jvm (смотрите JavaExec.setDebug(boolean)).

Если вашему приложению требуется специфичный набор настроек JVM или системных свойств, вы можете настроить свойство applicationDefaultJvmArgs. Эти аргументы JVM применяются к задаче run, а также учитываются в сгенерированных скриптах запуска вашего дистрибутива.

Пример 53.3. Установка настроек JVM по умолчанию

build.gradle

applicationDefaultJvmArgs = ["-Dgreeting.language=en"]
	  

53.1.1. Дистрибутив.

Дистрибутив приложения может быть создан с помощью плагина распространения (который применяется автоматически). Дистрибутив main создается со следующим содержимым:

Таблица 53.1. Содержимое дистрибутива
МестоположениеСодержимое
(корневая папка)src/dist
libВсе зависимости времени выполнения и файлы классов основого набора исходников.
binСкрипты запуска (сгенерированные задачей createStartScripts).

Статические файлы, которые нужно добавить в дистрибутив, можно просто разместить в src/dist. Более продвинутую настройку можно произвести с помощью CopySpec, предоставляемого основным дистрибутивом.

Пример 53.4. Включение выходных данных других задачи в дистрибутив приложения

build.gradle

task createDocs {
    def docs = file("$buildDir/docs")
    outputs.dir docs
    doLast {
        docs.mkdirs()
        new File(docs, "readme.txt").write("Read me!")
    }
}

distributions {
    main {
        contents {
            from(createDocs) {
                into "docs"
            }
        }
    }
}
	  

После указания, что дистрибутив должен включать выходные файлы задачи (смотрите Секцию 19.10.1 Входные и выходные данные задачи), Gradle знает, что задача, которая формирует файлы, должна быть выполнена до сборки дистрибутива и позаботиться об этом для вас.

Пример 53.5. Автоматическое создание файлов для дистрибутива

Вывод команды gradle distZip

> gradle distZip
:createDocs
:compileJava
:processResources NO-SOURCE
:classes
:jar
:startScripts
:distZip

BUILD SUCCESSFUL

Total time: 1 secs
	  

Вы можете запустить gradle installDist для создания образа приложения в build/install/имяПроекта. Вы можете запустить gradle distZip для создания zip-архива, содержащего дистрибутив, gradle distTar для создания tar-архива или gradle assemble для создания обоих.

53.1.2. Настройка генерации скриптов запуска.

'Из коробки' плагин приложений можете генерировать скрипты запуска Unix (подходят для Linux, Mac OS X и так далее) и Windows. Скрипты запуска стартуют JVM с указанными настройками, определенными как часть оригинальной сборки и среды выполнения (например, переменная окружения JAVA_OPTS). Шаблоны скриптов по умолчанию основаны на тех же скриптах, что используются для запуска самого Gradle и которые поставляются в составе дистрибутива.

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

53.2. Задачи.

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

Таблица 53.3. Плагин приложений - задачи
Имя задачиЗависит отТипОписание
runclassesJavaExecЗапускает приложение.
startScriptsjarCreateStartScriptsСоздает специфичные для ОС скрипты, которые запускают проект как JVM-приложение.
installDistjar, startScriptsSyncУстанавливает приложение в указанную папку.
distZipjar, startScriptsZipСоздает zip-архив дистрибутива, включающие библиотеки времени выполнения и специфичные для ОС скрипты.
distTarjar, startScriptsTarСоздает tar-архив дистрибутива, включающие библиотеки времени выполнения и специфичные для ОС скрипты.

53.3. Условные свойства.

Плагин приложений добавляет несколько свойств к проекту, которые вы можете использовать для настроки его поведения. Смотрите класс Project в документации API.