Обновить
0.5

Gradle *

Система автоматизации сборки Java-проектов

Сначала показывать
Порог рейтинга
Уровень сложности

Шпаргалка по Gradle

Время на прочтение7 мин
Охват и читатели123K

Как мне кажется, большинство людей начинают разбираться с gradle только тогда, когда в проекте что-то надо добавить или что-то внезапно ломается — и после решения проблемы "нажитый непосильным трудом" опыт благополучно забывается. Причём многие примеры в интернете похожи на ускоспециализированные заклинания, не добавляющие понимания происходящего:


android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.habr.hello"
        minSdkVersion 20
        targetSdkVersion 28
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
}

Я не собираюсь подробно описывать, для чего нужна каждая строчка выше — это частные детали реализации андроид-плагина. Есть кое-что более ценное — понимание того, как всё организовано. Информация раскидана по различным сайтам/официальной документации/исходникам градла и плагинов к нему — в общем, это чуть более универсальное знание, которое не хочется забывать.


Дальнейший текст можно рассматривать как шпаргалку для тех, кто только осваивает gradle или уже забыл.

Читать дальше →

Приглашаем на DINS Java EVENING 26 июня

Время на прочтение2 мин
Охват и читатели1.2K
Рады пригласить всех интересующихся java-разработкой на очередной открытый DINS Java EVENING, который пройдет в нашем офисе на Старо-Петергофском, 19.

На встрече мы познакомимся с опытом TextBack и узнаем, как проходит их миграция с Vert.x на Spring. Коллега из Genestack поделится своим опытом построения билд-системы на Gradle в большом проекте с нуля.

Под катом — подробнее о докладах и спикерах, ссылка на регистрацию для участия во встрече.

image

Читать дальше →

Создание многомодульного Gradle проекта SpringBoot + Angular в IDEA

Время на прочтение3 мин
Охват и читатели26K

Достаточно часто в моей практике используется связка Spring + Angular. Хочу поделится своим опытом по подготовке подобного проекта в среде разработки IntelliJ IDEA.


Создаем пустой Gradle проект


Для начала создадим пустой Gradle проект в IDEA, при этом снимите все галочки библиотек и фреймворков.




Пусть наш артефакт будет «demo», а группа «com.habr». После создания проекта будет автоматически сгенерировано файлы settings.gradle и build.gradle со следующим содержанием:

Читать дальше →

Подружить CI, unit-тесты и базу данных

Время на прочтение11 мин
Охват и читатели5.6K
image

Статья про тестирование взаимодействия с БД в CI. Я видел несколько решений использующих docker и testcontainers, но у меня есть своё и им я хочу поделиться.
Читать дальше →

Кросс-компиляция Scala в Gradle проекте

Время на прочтение3 мин
Охват и читатели3K

Для Scala проектов довольно распространённым является предоставление бинарных артефактов скомпилированных под несколько версий Scala компилятора. Как правило для целей создания нескольких версий одного артефакта в сообществе принято использовать SBT, где эта возможность есть прямо из коробки и настраивается в пару строк. Но что если мы хотим заморочится и создать билд для кросс компиляции не используя SBT?


Для одного из своих Java проектов я решил создать Scala фасад. Исторически весь проект собирается с помощью Gradle, и фасад было решено добавить в этот же самый проект в качестве сабмодуля. Gradle в целом может компилировать Scala модули с той лишь оговоркой что никакой кросс компиляции в поддержке не заявлено. Есть открытый тикет 2017 года и пара плагинов (1, 2), которые обещают добавить эту возможность в ваш проект, но с ними есть проблемы, как правило связанные с публикацией артефактов. И больше в целом ничего нет. Я решил проверить, как сложно на самом деле сконфирурировать билд для кросс компиляции без специальных плагинов и СМС.

Читать дальше →

IntelliJ IDEA 2019.1: Кастомизация тем интерфейса, switch-выражения из Java 12, отладка внутри Docker-контейнеров

Время на прочтение5 мин
Охват и читатели18K
Это – обзор нового в IntelliJ IDEA 2019.1. Ссылки в заголовках ведут на соотвествующие разделы на сайте, где всё описано детально, но на английском.

image
Читать дальше →

В чем набрать и чем собрать C++ проект

Время на прочтение14 мин
Охват и читатели101K
Задавшись этим вопросом я, в первую очередь, сформулировал требования: жесткие и опциональные (но желательные) для системы сборки и графической среды разработки.
Сразу хочу отметить что речь идет о написании C++ кода не под какую-то специфичную платформу типа Android или фреймворка, например Qt, — где все уже готово, как с построением так и с редактированием кода, а об generic коде не привязанному к конкретной платформе или фреймворку.
Читать дальше →

Lombok, sources.jar и удобный дебаг

Время на прочтение15 мин
Охват и читатели7.6K
В нашей команде мы очень любим Lombok. Он позволяет писать меньше кода и меньше его рефакторить, что идеально подходит для ленивых разработчиков. Но если помимо артефакта проекта вы публикуете так же и исходники с документацией, то можете столкнуться с проблемой — код исходников не будет совпадать с байткодом. О том, как мы решали эту проблему и с какими трудностями столкнулись в процессе, я и расскажу в этом посте.


Читать дальше →

Frontend для backend девелопера

Время на прочтение5 мин
Охват и читатели14K
Сразу хочу оговориться, что данная статья не предназначена для тех, у кого разработка frontend основная деятельность. Данный пост предназначается для разработчиков backend которым понадобилось срочно прикрутить web UI или тех, кто просто интересуются новыми областями, а также fullstack разработчики.

Итак, перейдем к проблеме. Вспоминается статья, а также, на просторах Хабра было еще несколько подобных. Представлены они все как шуточные, но как говорится «в каждой шутке есть доля правды», а тут даже и не доля… Но вот в чем вопрос, насколько целесообразны все эти фреймворки, так ли они нужны?

Вопрос который я хотел бы поднять, преимущественно о сборке. Именно на этом этапе js-сообщество предлагает неимоверное количество инструментов, необходимость которых совсем не очевидна. Например, сообществом предлагается различные варианты работы с модулями, что имело смысл в свое время, но на данный момент спецификация на import/export поддерживается всеми современными браузерами, и даже недобраузером edge. Так как ранее мы уже упоминали, что для работы со старыми библиотеками у нас нет причин, рассмотрим на спецификации import/export. А вот то что действительно будет нам необходимо, так это какая либо работа с зависимостями.
Читать дальше →

Android: создание динамических Product Flavors и Signing Configs

Время на прочтение6 мин
Охват и читатели13K

При работе над Android-проектом, представляющий собой платформу для создания приложений для просмотра видео-контента, возникла необходимость динамического конфигурирования product flavors с выносом информации о signing configs во внешний файл. Подробности под катом.

Читать дальше →

Gradle 5.0 — что нового

Время на прочтение2 мин
Охват и читатели11K

В процессе разработки CUBA мы применяли все три основных инструмента сборки — начали с Ant, потом перешли на Maven на короткое время, а сейчас используем Gradle и, похоже, что в ближайшее время останемся с ним.


Не так давно вышел Gradle 5.0. В этой версии появилось большое количество новых возможностей, которые помогут разработчикам писать более сложные сценарии и собирать свои проекты ещё быстрее и безболезненнее.


image

Читать дальше →

Multi-release JARs — Плохо или хорошо?

Время на прочтение10 мин
Охват и читатели5K

От переводчика: мы активно работаем над переводом платформы на рельсы Java 11 и думаем над тем, как эффективно разрабатывать Java библиотеки (такие как YARG) с учётом особенностей Java 8 / 11 так, чтобы не пришлось делать отдельные ветки и релизы. Одно из возможных решений — multi-release JAR, но и тут не всё гладко.


Java 9 включает новую опцию Java-рантайма под названием multi-release JARs. Это, возможно, одно из самых противоречивых нововведений в платформе. TL;DR: мы считаем это кривым решением серьезной проблемы. В этом посте мы объясним, почему мы так думаем, а также расскажем, как вам собрать такой JAR, если вам сильно хочется.


Multi-release JARs, или MR JARs, — это новая функция платформы Java, появившаяся в JDK 9. Здесь мы подробно расскажем о значительных рисках, связанных с использованием этой технологии, и о том, как можно создавать multi-release JARs с помощью Gradle, если вы ещё хотите.


По сути, multi-release JAR — это Java-архив, включающий несколько вариантов одного класса для работы с разными версиями среды исполнения. Например, если вы работаете в JDK 8, среда Java будет использовать версию класса для JDK 8, а если в Java 9, используется версия для Java 9. Аналогично, если версия создана для будущего выпуска Java 10, рантайм использует эту версию вместо версии для Java 9 или версии по умолчанию (Java 8).


Под катом разбираемся в устройстве нового формата JAR и выясняем нужно ли это всё.

Читать дальше →

Модульная разработка Android приложений

Время на прочтение5 мин
Охват и читатели16K

image


При разработке Android приложений наступают моменты, когда те или иные части кода можно вынести в виде библиотек, чтобы можно было переиспользовать их в разных проектах:


  • Модули в проекте, которые часто встречаются. Например, кастомные View
  • Когда существующий API неудобный или не позволяет сделать то, что задумали — создаем расширение для этого API

Чаще всего все проблемы были решены задолго до нас, но в нашем случае нужно было вынести часть слоя бизнес-логики и фактически весь слой, отвечающий за данные в 3 наших основных продукта объединенной компании Колёса Крыша Маркет. Все наши продукты – классифайды про автомобили, недвижимость и прочие товары. Поэтому нами, разработчиками, было решили написать одно решение для всех продуктов компании. К тому же, это облегчило нашу работу.

Читать дальше →

Ближайшие события

Ускоряем время сборки и доставки java web приложения

Время на прочтение2 мин
Охват и читатели6.8K

TLTD


  1. удалил jar из сборки проекта
  2. заменил его таском, который быстрее в 7 раз


Детали и результат под катом.

Читать дальше →

Как киту съесть Java-приложение и не подавиться

Время на прочтение8 мин
Охват и читатели68K
Здравствуйте, уважаемые хабравчане! Сегодня я хотел бы рассказать о том, как «скормить» Java-приложение докеру, как при этом лучше действовать, а чего делать не стоит. Я занимаюсь разработкой на Java более 10 лет, и последние года три провёл в самом тесном общении с Docker, так что у меня сложилось определённое представление о том, что он может и чего не может. Но ведь гипотезы надо проверять на практике, не так ли?

Я представил весь процесс как старую добрую компьютерную игру с тёплым ламповым пиксель-артом.

Начнем мы, как и полагается любой игре, с некоторого брифинга. В качестве вводной возьмем немного рекламы докера.

На сайте докера можно ознакомиться с рядом рекламных посулов – а именно, с обещанием увеличить скорость разработки и развертывания аж в 13 раз и повысить портативность в разработке (в частности, избавиться о сакраментального «работает на моей машине»). Но соответствует ли это реальности?

Сейчас мы попробуем доказать/опровергнуть эти утверждения.
Читать дальше →

Использование buildSrc для внедрения дополнительной логики в Gradle

Время на прочтение4 мин
Охват и читатели29K

Интересная заметка от Madis Pink в блоге ZeroTurnaround RebelLabs. Если кто-то вас разбудит посреди ночи и спросит: «какую фичу в Gradle должен знать каждый?» — с уверенностью отвечай, что это buildSrc. Это особый магический Gradle-проект внутри твоего репозитория, доступный всем файлам build.gradle в виде библиотеки.


Описанный далее подход позволяет писать код на удобном тебе JVM-языке, и результат использовать прямо в своих сборочных скриптах. Как бонус, можно покрыть юнит-тестами особо хитрые моменты в этих скриптах. Добро пожаловать под кат!

Читать дальше →

В разрезе: новостной агрегатор на Android с бэкендом. Система сборки

Время на прочтение5 мин
Охват и читатели2.4K
Вводная часть (со ссылками на все статьи)

Лет 10-15 назад, когда программы состояли из исходников и небольшого количества двоичных файлов с работой по сборке итоговых программ отлично справлялись всевозможные «?make». Однако сейчас современные программы и подходы к разработке сильно изменились – это:
множество различных файлов (не считаю исходников) – стили, шаблоны, ресурсы, конфигурации, скрипты, бинарные данные и.т.д;

  • предпроцессоры;
  • системы проверки стиля исходников или всего проекта (lint, checkstyle и т.д.);
  • методики разработки, основанные на тестах, с их запуском при сборке;
  • различного типа стенды;
  • системы развёртывания на базе облачных технологий и т.д. и.т.п.
Читать дальше →

Переписываем домашний проект на микросервисы (Java, Spring Boot, Gradle)

Время на прочтение13 мин
Охват и читатели75K

Введение


Image


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


Ранее у меня был домашний проект (хотя скорее даже его прототип), который было решено переписать на микросервисы. Проект представлял собой попытку сделать обучающую Java игру. То есть у игрока есть поле, на этом поле он может управлять каким-то юнитом с помощью кода. Пишет код, отправляет на сервер, там он выполняется и возвращает результат, который отображается пользователю.


Всё это было реализовано в виде прототипа — были пользователи, один урок и одна задача для него, возможность отправить код, который компилировался и исполнялся. Кое-какой фронтенд, но в статье о нём речи не будет. Технологии — Spring Boot, Spring Data, Gradle.


В статье будет реализован такой же прототип, но уже на микросервисах. Реализация будет наиболее простым путём (точнее наиболее простым, из известных мне). Реализация будет доступна любому, кто знаком со Spring.

Читать дальше →

Динамическое подключение внешних собственных модулей и плагинов в Gradle

Время на прочтение3 мин
Охват и читатели8K

Преамбула


Есть своя «внешняя» библиотека и есть своё приложение, использующее эту библиотеку (подгружается через внешний репозитарий). Требуется внести изменение и в библиотеку и в приложение.

Казалось бы, собери библиотеку и выложи её в локальный maven-репозитарий, а потом уже собирай приложение. Но хочется, чтобы можно было поправив код в библиотеке сразу попробовать изменения в приложении и при этом сохранить раздельное хранение кода библиотеки и приложения, включая настройки IDE и прочее.

С помощью gradle и символических связей в файловой системе такое можно легко устроить.
Читать дальше →

Android + Gradle + CI + CD или Как настроить кормушку для котов

Время на прочтение6 мин
Охват и читатели24K


Здравстуй дорогой читатель. Если тебе незнакомы понятия Continuous integration (CI), Continuous delivery (CD) или же у тебя нет представления как и зачем их нужно использовать, то прошу под кат, где тебя ждет небольшое описание как настроить данные сервисы в своем Android проекте, а также какие бонусы будут получены в итоге.
Читать дальше →