Se bem entendi, você está confundindo Project.dependencies
bloco de script com o Project.buildscript.dependencies
bloco de script (assim como fiz quando cheguei a esta questão).
Vou tentar responder com o que descobri.
Acho que você já deve estar familiarizado com o Project.dependencies
bloco de script. Neste bloco, declaramos dependências que são exigidas por nosso código-fonte. Existem várias maneiras de declarar uma dependência necessária para o projeto. Consulte o Tutorial do Gradle: tipos de dependência . Mencionarei apenas a parte mais relevante para este problema:
compile 'org.hibernate:hibernate-core:5.0.5.Final'
é uma declaração de dependência do módulo. A configuração de compilação (que agora está obsoleta pela configuração de implementação.) É meramente uma palavra-chave para Implementation only dependencies.
Não é uma palavra-chave que descreve qual tipo de dependência é (por tipo aqui estou seguindo os três tipos definidos no tutorial, ou seja, módulo, arquivo e projeto.)
No Tutorial do Gradle: Organizando a lógica de compilação , diz:
Se seu script de construção precisa usar bibliotecas externas, você pode adicioná-las ao classpath do script no próprio script de construção. Você faz isso usando o método buildscript (), passando um encerramento que declara o classpath do script de construção.
Esta é a mesma maneira que você declara, por exemplo, o classpath de compilação Java. Você pode usar qualquer um dos tipos de dependência descritos em Tipos de dependência, exceto dependências de projeto.
Tendo declarado o caminho de classe do script de construção, você pode usar as classes em seu script de construção como faria com qualquer outra classe no caminho de classe.
Espero que as coisas estejam ficando claras para você agora.
Com classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"
estamos definindo o classpath
método com o com.android.tools.build:gradle:${Versions.android_gradle_plugin}
qual é uma dependência de módulo que é usada pelo próprio script de construção, em vez da fonte em seu projeto.
Por outro lado, compile 'org.hibernate:hibernate-core:5.0.5.Final'
estamos declarando uma dependência de módulo necessária para seu projeto com a configuração de compilação .
tl; dr: A classpath
, compile
, e implementation
são todas as palavras-chave que podem ser utilizados contra as dependências sob diferentes circunstâncias. O primeiro é usado quando você deseja passar uma dependência para o script de construção, e o último é uma das configurações que você deseja declarar.
classpath
não é um escopo de dependência válido.