Как стать автором
Обновить

Комментарии 18

Хотелось бы добавить немного к статье.

1. В gradle символ ":" используется вместо "/" и для более ветвистой структуры ссылки на проект могут выглядеть так ":loaders:xml-loader"
2. Если не ошибаюсь, в последних версиях таск wrapper можно не описывать в build.gradle
3. Т.к. файлы gradlew и gradlew.bat расположены в корневой папке проекта, запускать сборку приходится используя "../gradlew". Либо можно использовать специальные скрипты (необходимо положить в папку прописанную в PATH): forums.gradle.org/gradle/topics/gradlew_scripts_in_gradle_bin_to_find_gradlew_scripts_upwards_within_project_space
Спасибо!

1. Абсолютно согласен с дополнением, статью обновил.

2. Да, таск wrapper можно не создавать, но я бы рекомендовал это делать. Почему? Потому что может возникнуть необходимость использовать разные версии gradle для разных проектов. И тут я не задумываюсь, выполнил gradle wrapper, а потом запускаю нужную мне версию через gradlew.

3. Это очень полезно для тех, кто часто пользуется командной строкой для сборки. Лично для себя я в этом проблемы не вижу, потому что мне крайне редко приходится запускать задачи из консоли, в основном через IDE, а когда приходится использовать консоль, когда лень загружать тяжелую IDE или ее просто нет или вообще компьютер не мой, то написать лишнюю точку не трудно, а иногда и быстрее
Добавлю, что плагин idea генерирует устаревший формат файлов, поэтому подмодули цепляются криво или не цепляются. См. issues.gradle.org/browse/GRADLE-1041, в последнем комментарии есть решение
Я, кстати, вот чего не понимаю. 2-3 года назад еще понятно, но сейчас зачем вообще нужен этот плагин? имхо, идея очень даже хорошо импортит gradle project.
Ну у меня, например, проект собирается полчаса. Проще застрелиться, чем отдавать его на откуп Идее. И обычный gradle build из корня не работает, не уверен, что там это можно подпилить…
Если честно, не очень понял о чем Вы, раскройте мысль пожалуйста.

На всякий случай, я говорил исключительно про альтернативу «apply plugin: „idea“» vs «File -> Import project -> Gradle».
По правде говоря, я просто не пробовал так, потому что когда начинал проект, градл в Идее у меня почему-то не работал совсем, а сейчас все работает — смысла трогать нет. Иногда при старте Идея пробует сама собрать проект и быстро падает, но это меня не очень волнует.
13 Идея хорошо импортирует, но у меня возникали проблемы в 12 версии, какие, к сожалению вспомнить не могу. Idea вываливалась с каким-то исключением. Еще пробовал открывать в NetBeans. Он тоже хорошо понимает. А остальные IDE?
Спасибо за замечание, учтено.
Gradle отличная штука, но не без проблем.
Например плагин application, не может корректно завершать свою работу.
Поясню.
Делаю проект (простенький пример на netty), запускаю его стандартно из IDEA.
Хочу остановить его работу, подправить код и по новой запустить.
В общем типичный юзкейс.
Нажимаю кнопочку stop, как обычно. Правлю код, запускаю по новой… и фиг там.
От предыдущего запуска в памяти висит процесс, который блочит ресурсы.
Maven нормально прибивает за собой процессы, а гредл не умеет.
При чем если это web приложение, то все ок, запуск например jettyRun корректно завершается.
В идее можно попробовать в настройках конфигурации запуска (Edit Configurations… в выпадающем списке рядом с кнопками Run и Debug) поставить галочку Single Instance only, тогда можно будет даже не останавливать процесс. При попытке запустить еще один, IDE предупредит и предложит остановить предыдущий процесс и запустить новый.
Может, это решит проблему с «висячими» процессами.
Попробовал сейчас.
Нет, не помогает. IDE предупреждает, предлагает остановить предыдущий процесс… и думая что остановила его запускает новый.
А старый продолжает висеть.
Ни разу с таким не сталкивался, может быть дело в самом приложении?
Было бы приложение))
Там буквально несколько классов. Тестовый пример Netty.
При чем стопарнуть запущенное приложение не может ни нетбинс ни эклипс.
Походу проблема именно в самом гредле.
Видимо, плагин application не подходит для запуска netty-приложений.
Для jetty, war и даже javafx свои плагины, со своими тасками *run: jettyRun, jfxRun или без них (в плагине war)

Может, стоит написать issue команде gradle на их форуме с ошибками, логами, юзкейсом.
Скорее всего, дело все-таки в приложении))

Netty внутри запускает потоки-не-демоны. Остановить такую штуку принудительно можно либо через System.exit, либо kill -9. Первое gradle не может сделать, т.к. запускает приложение в отдельном процессе (да и если бы запускал в своей jvm, все равно нельзя, т.к. run может быть не листовой задачей в дереве). А за «kill -9» их бы просто сообщество повесило.

Так что ставьте на main-thread Runtime.getRuntime().addShutdownHook и тормозите Netty руками.
Не, похоже я таки нагнал. Тогда действительно непонятно, как работает этот плагин.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации