Как упоминалось в Списке для изучения для разработчиков Java, официальное руководство пользователя Gradle слишком сложно для учащихся. Этот пост представляет собой краткое руководство для изучающих Gradle. Моя цель состоит в том, чтобы после того, как вы усвоите этот пост, вы стали

  1. умение использовать Gradle для решения проблем и
  2. не стесняйтесь использовать официальную документацию в качестве справочной информации всякий раз, когда вам нужно искать подробности.

Установить Грейдл

Если вы используете Mac, просто выполните

brew install gradle

Ссылки: установить brew, установить gradle

Основы

Грейдл

Gradle — это инструмент сборки. Что означает инструмент сборки? Прежде всего, это означает, что это инструмент для превращения исходного кода в пакет для запуска вашего приложения. Например, в случае библиотек Java он превращает файлы *.java в файл *.jar.

Поэтому наиболее распространенной и важной функциональностью Gradle является операция с файлами.

Пожалуйста, запомните приведенное выше утверждение. По моему собственному опыту, это утверждение полностью демистифицирует Gradle. Теперь вы можете сказать себе: это не имеет большого значения. Это просто инструмент для преобразования файлов, их перемещения и упаковки.

Проект

Проект — это основная единица Gralde для организации исходного кода. Корневой проект охватывает весь набор исходного кода. Например, весь исходный код Gradle — это корневой проект. Подпроект обычно является модулем всего проекта. Например, build-init — это подпроект для Gradle.

Теперь давайте создадим демонстрационный проект для изучения Gradle.

mkdir gradle-medium && cd gradle-medium # make a dir for the project
# bootstrap a gradle project
gradle init --type java-library --project-name `basename $PWD` --dsl groovy --package gradle.medium --test-framework testng

Команда gradle init предоставляется подпроектом build-init, упомянутым выше. Ссылка: Плагин сборки Init

Кстати, в качестве примечания, вы, вероятно, будете запускать gradle init команды снова и снова, чтобы создавать крошечные демонстрационные проекты для различных учебных целей. Я настоятельно рекомендую вам позаимствовать инструмент g здесь, чтобы вы могли быстро получить примеры команд, как показано ниже:

$ g gradle init
gradle init --project-name typeahead --dsl groovy ...
gradle init --project-name learn-groovy-gradle --dsl groovy ...
gradle init --project-name `basename $PWD` --dsl groovy ...
gradle init --type java-library --project-name `basename $PWD` ...

Конфигурация, зависимость, задача

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

Возьмем, к примеру, компиляцию кода Java.

Во-первых, вам нужен контейнер для группировки библиотек, которые вы используете в своем исходном коде. Контейнер — это то, что они называют конфигурацией в сборке Gradle. Например, в старые добрые времена конфигурация compile — это место, где вы размещаете библиотеки, на которые есть ссылки в исходном коде Java. (Конфигурация compile устарела в новых версиях Gradle. Ссылка: Плагин Java)

Во-вторых, вы добавляете в конфигурацию библиотеки, которые вам нужно использовать. Библиотеки — это зависимости вашего проекта. Обычно это делается, как показано ниже:

dependencies {
    compile 'org.apache.commons:commons-lang3:3.10'
}

В приведенном выше примере библиотека commons-lang3 добавляется в конфигурацию compile, что позволяет вашему коду ссылаться на классы из commons-lang3.

В-третьих, вы используете зависимости конфигурации в задаче. В случае компиляции java-кода задача предоставляется плагином Java, поэтому в этом примере она как бы скрыта от вас. Мы сделаем упражнение ниже, чтобы собрать все вместе.

Упражнение: переупаковать гуаву

Цель этого упражнения — переупаковать библиотеку guava, чтобы класс HtmlEscapers был удален из переупакованной версии. (Само упражнение предназначено только для демонстрационных целей. Однако этот метод может быть действительно полезен для разрешения конфликтов классов, когда две зависимости вашего проекта каким-то образом имеют класс с именем, и только одна из них имеет отношение к вам.)

Шаг 1: создайте новую конфигурацию repackaged, как показано ниже.

configurations {
    repackaged
}

Шаг 2: добавьте гуаву в перепакованную конфигурацию.

dependencies {
    repackaged 'com.google.guava:guava:28.1-jre'
}

Шаг 3: создайте задачу, выполните следующие действия:

task repackageGuava(type: Zip) {
    archiveFileName = 'guava-repackaged.jar'
    destinationDirectory = file("${buildDir}/repackaged")
    def guavaJar = configurations.getByName('repackaged')
        .find {it.name.startsWith('guava')}
    from {zipTree(guavaJar)} {
        exclude '**/HtmlEscapers.class'
    }
}

Как видите, задача использует конфигурацию repackaged. Справка: задача Zip (jar — это просто zip-файл, кстати).

Теперь запустите его.

$ ./gradlew repackageGuava
BUILD SUCCESSFUL in 980ms
1 actionable task: 1 executed

Заключительные примечания

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

Что делать дальше