RG: Как создать Gradle проект через IntelliJ IDEA?

Иногда бывает удобным создавать gradle проект не через gradle напрямую, а через IntelliJ IDEA. Делается это очень просто.

Шаг 1

Первым делом нам нужно установить gradle, если он не установлен.

Шаг 2

Запустить  IntelliJ IDEA и выбрать создание нового проекта.

1

Шаг 3

Выбрать тип проекта Gradle и указать путь к папке куда он установлен.

2

Шаг 4

Указываем имя проекта.

3

 

В принципе можно утверждать, что проект готов к работе.

4

 

Шаг 5

Давайте создадим Main класс, который выводит Hello World в консоль. Для этого создадим папку src/main/java. ПУТЬ ДОЛЖЕН БЫТЬ ИМЕННО ТАКИМ КАК Я УКАЗАЛ. Иначе gralde не найдет исходники проекта.

56

Шаг 6

Создадим класс, который будет выводить фразу Hello World.
789

Шаг 7

Запускаем этот код.

1011

Все.

Еще можно ознакомиться с этим видео.

Подробнее

Gradle часть 1 preview

Gradle Tutorial часть 1 (Теория) – Gradle vs Maven vs Ant

Мой справочник по Gradle можно найти тут.

Сборка проекта – важная часть разработки программ. В этом ролике я расскажу о Gradle. Мой рассказ будет полезен в основном для новичков. Я сравню Gradle с его предшественниками Maven и Ant. Получился своеобразный батл Gradle vs Maven vs Ant.

Затронул вопросы:
1. Инкрементальная сборка в Gradle
2. Жизненный цикл Maven.
3. Направленный ациклический граф в Gradle (DAG от англ. directed acyclic graph).

Что такое система автоматизированной сборки?

Как Вы понимаете, любая технология или инструмент предназначены для решения какой-то конкретной проблемы. Например, группа людей строит дом – для этого они используют доски и гвозди. Но вот первая проблема, у них нет инструмента для того чтобы вогнать гвоздь в доску. Для решения этой проблемы можно использовать  молоток.

Также и в программирование, для того чтобы программист мог запустить проект, для начала нужно его подготовить или если пользоваться обычной терминологией, то собрать проект. Когда это небольшое приложение, скажем Hello World –  все очень просто. Достаточно откомпилировать один файл и запустить его.

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

Проблема усугубляется еще тем, что эти действия требуются делать несколько десятков раз в день. Счет бесполезной и нудной работы идет на часы. На лицо неэффективная трата времени и денег заказчика. Тут в дело вступают системы для автоматической сборки проектов. Они позволяют свести весь этот пласт работы к простому запуску команды через консоль или в IDE и ожиданию в несколько минут.

Кстати, это одна из причин, почему иногда кажется что программист ходит по офису и ничего не делает, а только пьет чай и зависает на YouTube.

Что они из себя представляют?

Если в двух словах, то это, как правило, консольные приложения. Которые устанавливаются куда-нибудь на Вашу файловую систему. После чего, в папочке в которой хранится Ваш проект, Вы пишите скрип в котором описываете то, как правильно должен собираться Ваш проект. Обычно этот скрипт называют build-script.

Затем Вы запускаете этот скрипт на исполнение и ждете пока он закончит работу. Когда скрипт исполнился – у Вас есть готовое к использованию приложение. При желании можно пойти дальше и заставить скрипт еще протестировать приложение запустив Unit-тесты и закачать приложение на сервер, ну или в среду где оно должно исполняться.

Основное отличие Gradle от других подобных систем.

Первое, что бросается в глаза и отличает Gradle от Maven и Ant, это то что из себя представляет исполняемый скрипт. Но об этом чуть позже. А пока упомяну то что их объединяет. Все они используют DSL язык для описания скрипта.

DSL (англ. Domain Specific language, DSL — «предметно-специфичный язык»)  в двух словах, этот язык специально заточенный для какой-то конкретной задачи. Например, это SQL или HTML. Первый предназначен для работы с базой данных, а второй для построения разметки странички сайта. Больше, как правило, они ни для чего не используются. В отличие от Java, на котором можно делать что хочешь. Хочешь сайты напиши, а хочешь прилагу для смартфона.

Если взглянуть на скрипт каждого из этих сборщиков, то первое что Вы обнаружите, это разные языки на которых написаны скрипты. Скрипт для Ant и Maven это XML файл, а для Gradle это файл написанный на языке Groovy. Только поймите меня правильно, Groovy – не предметно-специфичный язык, а скорее более краткая версия Java.

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

Рис. 1. Пример build-script ant.

Дело в том, что в Ant используют императивный подход, лежащий в основе build-script. Это когда в скрипте Вы конкретно указываете, что нужно сделать и в какой последовательности. Например, зайти в папку такую, взять оттуда исходники, скомпилировать и выполнить какое-то действие. Проще говоря, создаете алгоритм и программа его исполняет. Это то, как мы обычно пишем программы. (Рис. 1)

В Maven же, используют декларативный подход к построению скрипта. Декларативный подход подразумевает, что Вы просто указываете какие-то данные, а сборщик сам знает где и что лежит. Откуда он это знает? Грубо говоря, большинство программистов договорилось до определенных стандартов построения структуры проекта. Например договорились, что исходники лежат по такому пути src/main/java. Все. Maven сам знает где-что искать. От разработчика требуется только за декларировать(указать) специфичные данные для проекта. Это могут быть названия, версия, необходимые библиотеки и т.д. (Рис. 2)

Рис. 1. Пример build-script ant.
Рис. 2. Пример build-script maven.

Повторюсь, в Ant мы последовательно расписываем что и как делать. Очень напоминает, написание кода. А в Maven мы расписываем, что ему необходимо для работы.

Вот хорошая аналогия! Вuild-script Ant – это подробный рецепт для варки борща, а сборщик Ant, как обычная девушка, которая варит борщ. Если она все сделает правильно, то борщ получится вкусным.

А build-script Maven – это просто список ингредиентов и указание того, что мы хотим видеть “на выходе”. Список мы даем профессиональному повару, который сам знает, что и как делать, и ему не нужны подробности.

Gradle, как самый молодой, вобрал в себя все преимущества Ant’а и Maven’а но убрал недостатки. (Рис. 3) Он совмещает в себе одновременную возможность декларативного и императивного подхода. Что дает ему простоту свойственную Maven и большую гибкость как у Ant. Также устранено недостатки, связанные с неудобством императивного подхода Ant’а, из-за использования XML. Поэтому в Gradle используется язык Groovy. (Рис. 4)

Рис. 3. Сущность gradle.

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

Рис. 4. Пример build-script gradle.
Рис. 4. Пример build-script gradle.

Второе отличие Gradle от других подобных систем.

Второе отличие – это подходы которые они используют в своей основе. Maven, например, основан на линейном жизненном цикле сборки проекта. (Рис. 5) Чтобы Вас не грузить, полностью его приводить не буду. Грубо говоря, это компиляция -> прогонка тестов -> упаковка и инсталляция. Вы просто, в консоли, указываете фазу цикла, например тестирование, и он сам произведет все необходимые действия для этой фазы. Подкачивает нужные артефакты, компилирует и прогоняет тесты. В Ant, как Вы понимаете, подход более гибкий так как мы сами расписываем все шаги сборки.

Рис. 5. Жизненный цикл Maven.

Если использовать Gradle для простенького проекта, то все выглядит похоже. Как-будто в нем тоже присутствуют линейный цикл. Но это не совсем так. Gradle основан на концепции направленного ациклического графа. Вершины графа представлены задачами Gradle, которые будут выполняться. Если простыми словами, то каждая задача – как промежуточный этап сборки проекта. (Рис. 6)

Рис. 6. Жизненный цикл Gradle.

Есть способ устанавливающий зависимость данной задачи от другой, добавляет другую задачу, как новую вершину (если она ещё не присутствует в графе) и создаёт направленное ребро между двумя вершинами. Любая связь проверяется на наличие циклов, чтобы предотвратить зацикливания. Примерно так может выглядеть абстракция сборки проекта.  

Дополнения

  1. Gradle поддерживает инкрементальную сборку. Которая позволяет определять изменения файлов, по-сравнению с прошлой сборкой. Если нет, то их повторная обработка не происходит. Такой подход позволяет сократить время на сборку проекта.
  2. О примере про борщ и повара. Этот повар настолько крут, что он сам себе добывает все необходимые ингредиенты. К чему я клоню? Да к тому, что Gradle, Maven и последние версии Ant поддерживают возможность автоматической загрузки нужных библиотек или артефактов в Ваш проект. Вам не нужно самому все скачивать и складировать в отдельную папку.
  3. Gradle может использоваться для работы с проектами на Java, Scala, C++, Android и iOS.

Кто использует Gradle?

Gradle набирает популярность. На данный момент, я нагуглил, что его используют такие проекты как Groovy и Hibernate, приложения под android, еще я слышал что LinkedIn и многие другие.

Все, господа! Теоретическая часть закончена.

Подробнее