После того, как мы создали полезное приложение, есть вероятность, что мы хотим поделиться им с другими людьми. Один из способов сделать это — создать бинарный дистрибутив, который можно скачать с нашего сайта.
В этом блоге рассказывается, как мы можем создать бинарный дистрибутив, который отвечает следующим требованиям:
- Наш бинарный дистрибутив не должен использовать так называемый «толстый кувшин». Другими словами, зависимости нашего приложения не должны быть упакованы в тот же файл jar, что и наше приложение.
- Наш бинарный дистрибутив должен содержать сценарии запуска для * nix и операционных систем Windows.
- Корневой каталог нашего двоичного дистрибутива должен содержать лицензию нашего приложения.
Давайте начнем.
Дополнительное чтение:
- Начало работы с Gradle: Введение поможет вам установить Gradle, описывает основные концепции сборки Gradle и описывает, как вы можете использовать функциональность для вашей сборки с помощью плагинов Gradle.
- Начало работы с Gradle: наш первый Java-проект описывает, как вы можете создать проект Java с помощью Gradle и упаковать свое приложение в исполняемый файл JAR.
- Начало работы с Gradle: Управление зависимостями описывает, как вы можете управлять зависимостями вашего проекта Gradle.
Создание бинарного распределения
Плагин приложения — это плагин Gradle, который позволяет нам запускать наше приложение, устанавливать его и создавать бинарный дистрибутив, в котором не используется подход «жирной банки».
Мы можем создать бинарный дистрибутив, внеся следующие изменения в файл build.gradle примера приложения, которое мы создали в предыдущей части моего учебного пособия «Начало работы с Gradle» :
- Удалите конфигурацию задачи jar .
- Примените плагин приложения к нашему проекту.
- Настройте основной класс нашего приложения, установив значение свойства mainClassName .
После того, как мы внесли эти изменения в наш файл build.gradle , он выглядит следующим образом (соответствующие части выделены):
01
02
03
04
05
06
07
08
09
10
11
12
13
|
apply plugin: 'application' apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'log4j:log4j:1.2.17' testCompile 'junit:junit:4.11' } mainClassName = 'net.petrikainulainen.gradle.HelloWorld' |
Плагин приложения добавляет пять задач в наш проект:
- Задача запуска запускает приложение.
- Задача startScripts создает сценарии запуска в каталоге build / scripts. Эта задача создает сценарии запуска для операционных систем Windows и * nix.
- Задача installApp устанавливает приложение в каталог build / install / [имя проекта] .
- Задача distZip создает бинарный дистрибутив и упаковывает его в zip-файл, который находится в каталоге build / distributions .
- Задача distTar создает двоичный дистрибутив и упаковывает его в tar-файл, который находится в каталоге build / Distribution .
Мы можем создать бинарный дистрибутив, выполнив одну из следующих команд в корневом каталоге нашего проекта: gradle distZip или gradle distTar . Если мы создадим бинарный дистрибутив, который упакован в zip-файл, посмотрите следующий вывод:
01
02
03
04
05
06
07
08
09
10
11
|
> gradle distZip :compileJava :processResources :classes :jar :startScripts :distZip BUILD SUCCESSFUL Total time : 4.679 secs |
Если мы распаковываем созданный бинарный дистрибутив, созданный плагином приложения, мы получаем следующую структуру каталогов:
- Каталог bin содержит сценарии запуска.
- Каталог lib содержит файл jar нашего приложения и его зависимости.
Вы можете получить больше информации о плагине приложения, прочитав главу 45. Плагин приложения Руководства пользователя Gradle .
Теперь мы можем создать бинарный дистрибутив, который удовлетворяет почти всем нашим требованиям. Однако нам все еще нужно добавить лицензию нашего приложения в корневой каталог нашего бинарного дистрибутива. Давайте двигаться дальше и узнаем, как мы можем это сделать.
Добавление файла лицензии нашего приложения в бинарный дистрибутив
Мы можем добавить лицензию нашего приложения в наш бинарный дистрибутив, выполнив следующие действия:
- Создайте задачу, которая копирует файл лицензии из корневого каталога нашего проекта в каталог сборки.
- Добавьте файл лицензии в корневой каталог созданного двоичного дистрибутива.
Давайте двигаться дальше и более подробно рассмотрим эти шаги.
Копирование файла лицензии в каталог сборки
Имя файла, который содержит лицензию нашего приложения, называется LICENSE , и он находится в корневом каталоге нашего проекта.
Мы можем скопировать файл лицензии в каталог сборки , выполнив следующие действия:
- Создайте новую задачу копирования под названием copyLicense .
- Настройте исходный файл с помощью метода from () интерфейса CopySpec . Передайте строку «LICENSE» в качестве параметра метода.
- Настройте целевой каталог с помощью метода into () интерфейса CopySpec . Передайте значение свойства $ buildDir в качестве параметра метода.
После того, как мы выполнили эти шаги, наш файл build.gradle выглядит следующим образом (соответствующая часть выделена):
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
apply plugin: 'application' apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'log4j:log4j:1.2.17' testCompile 'junit:junit:4.11' } mainClassName = 'net.petrikainulainen.gradle.HelloWorld' task copyLicense(type: Copy) { from "LICENSE" into "$buildDir" } |
Дополнительная информация:
- Документация по API задачи копирования
- Раздел 16.6 Копирование файлов Руководства пользователя Gradle
Теперь мы создали задачу, которая копирует файл LICENSE из корневого каталога нашего проекта в каталог сборки . Однако, когда мы запускаем команду gradle distZip в корневом каталоге нашего проекта, мы видим следующий вывод:
01
02
03
04
05
06
07
08
09
10
11
|
> gradle distZip :compileJava :processResources :classes :jar :startScripts :distZip BUILD SUCCESSFUL Total time : 4.679 secs |
Другими словами, наша новая задача не вызывается, и это, естественно, означает, что файл лицензии не включен в наш двоичный дистрибутив. Давайте исправим эту проблему.
Добавление файла лицензии в бинарный дистрибутив
Мы можем добавить файл лицензии в созданный бинарный дистрибутив, выполнив следующие действия:
- Преобразуйте задачу copyLicense из задачи копирования в «обычную» задачу Gradle, удалив строку «(type: Copy)» из ее объявления.
- Измените реализацию задачи copyLicense , выполнив следующие действия:
- Сконфигурируйте вывод задачи copyLicense . Создайте новый объект File, который указывает на файл лицензии, найденный в каталоге компоновки, и задайте его в качестве значения свойства output.file .
- Скопируйте файл лицензии из корневого каталога нашего проекта в каталог сборки.
- Плагин приложения устанавливает свойство CopySpec, называемое applicationDistribution, для нашего проекта. Мы можем использовать его для включения файла лицензии в созданный бинарный дистрибутив. Мы можем сделать это, выполнив следующие действия:
- Настройте расположение файла лицензии с помощью метода from () интерфейса CopySpec и передайте выходные данные задачи copyLicense в качестве параметра метода.
- Настройте целевой каталог с помощью метода into () интерфейса CopySpec и передайте пустую строку в качестве параметра метода.
После того, как мы выполнили эти шаги, наш файл build.gradle выглядит следующим образом (соответствующая часть выделена):
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
apply plugin: 'application' apply plugin: 'java' repositories { mavenCentral() } dependencies { compile 'log4j:log4j:1.2.17' testCompile 'junit:junit:4.11' } mainClassName = 'net.petrikainulainen.gradle.HelloWorld' task copyLicense { outputs.file new File( "$buildDir/LICENSE" ) doLast { copy { from "LICENSE" into "$buildDir" } } } applicationDistribution.from(copyLicense) { into "" } |
Дополнительное чтение:
- Документация по API действия doLast () задачи
- Раздел 45.5 Включение других ресурсов в распространение Руководства пользователя Gradle
- Groovydoc класса ApplicationPluginConvention
Когда мы запускаем команду gradle distZip в корневом каталоге нашего проекта, мы видим следующий вывод:
01
02
03
04
05
06
07
08
09
10
11
12
|
> gradle distZip :copyLicense :compileJava :processResources :classes :jar :startScripts :distZip BUILD SUCCESSFUL Total time: 5.594 secs |
Как мы видим, задача copyLicense теперь вызывается, и если мы распаковываем наш двоичный дистрибутив, мы замечаем, что файл LICENSE находится в его корневом каталоге.
Давайте перейдем к обобщению того, что мы узнали из этого поста в блоге.
Резюме
Этот пост научил нас трем вещам:
- Мы узнали, что мы можем создать бинарный дистрибутив с помощью плагина приложения.
- Мы узнали, как можно скопировать файл из исходного каталога в целевой каталог с помощью задачи « Копировать» .
- Мы узнали, как мы можем добавлять файлы в бинарный дистрибутив, который создается плагином приложения.
Если вы хотите поиграть с примером приложения из этого блога, вы можете получить его у Github .
Ссылка: | Начало работы с Gradle: создание бинарного дистрибутива от нашего партнера JCG |