TGViewer
A bit deeper A bit deeper @abitdeeper · 199 subscribers
Post #49 1.37K
🔍 Кейс-репорт: Когда Groovy решил поиграть в прятки с переменными

Поймал сегодня забавный баг в gradle-скриптах на Groovy. Спешу поделиться, чтобы вы тоже посмеялись (или поплакали) 😅

Суть в чем: объявляем переменную enableInstabug в build.gradle, используем её в разных местах. Смотрим код:

// Объявляем переменную
boolean enableInstabug = Boolean.valueOf(project.properties["enableInstabug"])

// В android блоке всё работает нормально
android {
defaultConfig {
manifestPlaceholders.readExtStoragePermMaxSdkVersion = enableInstabug ? "32" : "28"
}
}

// А в методе - сюрприз! 🎉
def applyInstabugIfNeeded() {
if (enableInstabug) { // Читает "false" как строку из gradle.properties
apply plugin: 'instabug-apm'
// ...
}
}


В чем прикол? Оказывается, в Groovy методы не захватывают переменные из внешнего скопа, в отличие от лямбд.

А почему никто не заметил? Потому что:
1. В скоупе метода переменная отсутствует - внутри Gradle неизвестные переменные "магически" резолвятся из gradle.properties если там есть свойство с таким же названием как переменная.
2. Метод читает свойство заново из gradle.properties - получает строку "false"
3. В условии if эта строка превращается в boolean по правилам Groovy - любая непустая строка считается true (привет JavaScript 😭)
4. Profit! 🎉 Код "работает", но совсем не так, как мы думали

Решения два:
1️⃣ Передавать переменную в метод как параметр:
def applyInstabugIfNeeded(boolean shouldEnableInstabug) { ... }


2️⃣ Использовать closure вместо метода:
def applyInstabugIfNeeded = {
if (enableInstabug) { ... }
}


Мораль: Gradle-скрипты на Groovy - как коробка шоколадных конфет: никогда не знаешь, что внутри. И да, они тоже могут испортить тебе день 🍫
  • 🔥 9
  • 😁 6
  • 😱 2
  • 💯 1
More from @abitdeeper
  1. Sep 8, 2026Нагенерил себе за пару промптов приложеньку чтоб удобно тренировки домашние вести. Очень р…
  2. Sep 4, 2026«Агент, сделай проект. А мы пока на митап» 🤖 Возвращаемся с nullptr.talks[3] — в этот раз…
  3. Sep 4, 2026Готовим наш четвёртый митап, приходите если в Алмате 👀 Запись тоже будет
  4. Jul 23, 2026🚀 Ищем спикеров на nullptr.talks[3] 📅 Когда: сентябрь 2026 📍 Где: to be announced ⏰ Зая…
  5. Jul 15, 2026Нужна помощь, совсем не айтишного характера. Ищу потенциального донора крови для моего кот…
  6. Feb 13, 2026Когда-нибудь я найду в себе силы возобновить посты в этот канал, а пока что, читатели из А…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →