Выбор ответа Middle Модульность обновлено

api и implementation в Gradle

Вопрос

Чем зависимость implementation отличается от api в Gradle-модуле?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: implementation не передаёт зависимость потребителям, и её изменение их не пересобирает; api передаёт. С implementation библиотека скрыта: потребители модуля её не видят и не перекомпилируются, если она изменилась. api нужен, когда типы зависимости торчат в публичных сигнатурах модуля.

Варианты ответа

  1. implementation не передаёт зависимость потребителям, и её изменение их не пересобирает; api передаётправильный ответ
  2. api подключает зависимость только в тестах и сэмплах, а implementation в основном коде
  3. implementation запрещает использовать типы библиотеки в исходном коде модуля, к ним доступ остаётся только через рефлексию
  4. Разницы нет: это синонимы, api оставлен для совместимости со старым плагином java-library

Разбор

С implementation библиотека скрыта: потребители модуля её не видят и не перекомпилируются, если она изменилась. api нужен, когда типы зависимости торчат в публичных сигнатурах модуля. Злоупотребление api разрастает граф перекомпиляции. Тестовые зависимости объявляют через testImplementation.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.