Если я правильно понимаю, вы путаете Project.dependencies
блок сценария с блоком Project.buildscript.dependencies
сценария (как и я, когда дошел до этого вопроса).
Я постараюсь ответить на это тем, что нашел.
Думаю, вы уже должны быть знакомы с Project.dependencies
блоком скрипта. В этом блоке мы объявляем зависимости, которые требуются для нашего исходного кода. Есть несколько способов объявить зависимость, которая нам нужна для проекта. См. Учебное пособие по Gradle: Типы зависимостей . Я упомяну только ту часть, которая наиболее актуальна для этой проблемы:
compile 'org.hibernate:hibernate-core:5.0.5.Final'
это объявление зависимости модуля. Конфигурация компиляции (которая теперь устарела конфигурацией реализации.) - это просто ключевое слово для него. Implementation only dependencies.
Это не ключевое слово, описывающее, какой тип зависимости это (здесь по типу я следую за тремя типами, определенными в учебнике, то есть модулем, файл и проект.)
В Gradle Tutorial: Organizing Build Logic говорится:
Если вашему сценарию сборки необходимо использовать внешние библиотеки, вы можете добавить их в путь к классам сценария в самом сценарии сборки. Вы делаете это с помощью метода buildscript (), передавая закрытие, которое объявляет путь к классам скрипта сборки.
Таким же образом вы объявляете, например, путь к классам компиляции Java. Вы можете использовать любой из типов зависимостей, описанных в разделе Типы зависимостей, кроме зависимостей проекта.
Объявив путь к классам скрипта сборки, вы можете использовать классы в своем скрипте сборки, как и любые другие классы в пути к классам.
Я надеюсь, что теперь вам все стало ясно.
Здесь classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"
мы устанавливаем classpath
метод, с com.android.tools.build:gradle:${Versions.android_gradle_plugin}
которым зависит зависимость модуля, которая используется самим сценарием сборки, а не источником в вашем проекте.
С другой стороны, compile 'org.hibernate:hibernate-core:5.0.5.Final'
мы объявляем зависимость модуля, необходимую для вашего проекта, с конфигурацией компиляции .
ТЛ; Dr: classpath
, compile
и implementation
все ключевые слова , которые могут быть использованы против зависимостей при различных обстоятельствах. Первый используется, когда вы хотите передать зависимость сценарию сборки, а второй - это одна из конфигураций, которые вы, возможно, захотите объявить.
classpath
не является допустимой областью зависимости.