如果我理解正确,那么您会将Project.dependencies
脚本块与Project.buildscript.dependencies
脚本块混淆(就像我遇到这个问题时所做的一样)。
我将尝试用我发现的内容回答这个问题。
我认为您应该已经熟悉Project.dependencies
脚本块。在此块中,我们声明源代码所需的依赖关系。有几种方法可以声明项目所需的依赖关系。请参阅Gradle教程:依赖类型。我只会提及与该问题最相关的部分:
compile 'org.hibernate:hibernate-core:5.0.5.Final'
是模块依赖项声明。编译配置(现在已由实现配置弃用。)仅是的关键字。Implementation only dependencies.
它不是描述依赖关系类型的关键字(按类型,这里我遵循教程中定义的三种类型,即模块,文件和项目。)
在Gradle教程:组织构建逻辑中说:
如果构建脚本需要使用外部库,则可以将它们添加到构建脚本本身中的脚本的类路径中。您可以使用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'
我们通过compile configuration声明了您的项目所需的模块依赖关系。
TL;博士:本classpath
,compile
以及implementation
是可以针对不同的情况下依赖使用的所有关键字。当您要向构建脚本传递依赖项时,使用前者,而后者是您可能要声明的配置之一。
classpath
不是有效的依赖项范围。