Отсутствует зависимость в зависимом проекте - PullRequest
0 голосов
/ 11 января 2019

У меня есть проект Android со следующей структурой:

-- Calendar
------app (app module)
----------build.gradle (module level)
------build.gradle (project level)
------Commons(A common project which i reuse across various projects)
----------common (common module in Commons project)
-------------build.gradle (for only common module level)
----------build.gradle(for Commons Project)

Теперь проблема в том, что если я скомпилирую Commons, разверну его в bintray и затем использую его как implementation 'com.amitkma.Commons:common:1.0.0' в модуле приложения, все зависимости (которые реализованы в общем build.gradle) также доступны для использования в модуле приложения , Но если я использую это как следующее implementation project(:Commons:common), доступны только зависимости, предоставленные с помощью api.

Я хочу знать, в чем разница между api и implementation относительно модуля, скомпилированного или используемого напрямую, как указано выше?

1 Ответ

0 голосов
/ 11 января 2019

Здесь есть две вещи:

  1. Разделение api и implementation при объявлении зависимостей. Короче говоря, зависимости в области действия implementation видны только при времени выполнения , потому что они являются детализацией реализации . Такие библиотеки будут использовать область действия runtime в своих опубликованных метаданных Maven. Больше информации в документации
  2. До Gradle 5.0 области метаданных Maven compile и runtime были смешаны Gradle, и, таким образом, все зависимости runtime действительно появились в пути к классам компиляции. Gradle 5 меняет это

Поэтому, когда вы публикуете свой компонент, ограничение Gradle 4.x означает, что ваши common зависимости доступны для app. Обратите внимание, что переход к Gradle 5 приведет к поломке, как задокументировано. И когда вы используете проект напрямую, разделение выполняется должным образом.

Исправление заключается в простом продвижении зависимостей , которые являются частью общего API , в конфигурацию api в common, а для среды выполнения объявите их в app, так как в конце концов они прямо требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...