在我的项目中添加依赖项时,我无法确定应该给它们的前缀,例如: "classpath"
或"compile".
例如,下面的依赖项应该是编译时还是类路径?
此外,它应该在我的应用程序 build.gradle中还是在模块特定的build.gradle中?
当前build.gradle(在应用程序级别):
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
compile 'org.hibernate:hibernate-core:5.0.5.Final'
compile 'mysql:mysql-connector-java:5.1.38'
}
答案 0 :(得分:29)
我猜你在compile
块中引用了classpath
和dependencies {}
。如果是这样,那些就是依赖Configurations。
配置只是一组命名的依赖项。
compile
配置由Java插件创建。 classpath
块中常见buildSrc {}
配置,其中需要为build.gradle声明依赖关系,本身(对于插件,可能)。
答案 1 :(得分:29)
如果 buildscript 本身需要运行某些内容,请使用 classpath 。
如果您的项目需要运行某些内容,请使用编译。
buildscript{}
块用于build.gradle本身。
对于多项目构建,顶级构建文件用于根项目,特定构建文件用于子项目(模块)。
顶级构建文件,您可以在其中添加所有子项目/模块通用的配置选项。
不要将应用程序依赖项放在顶级构建文件中,它们属于单个模块build.gradle文件
答案 2 :(得分:7)
如果我理解正确,您会将Project.dependencies
脚本块与Project.buildscript.dependencies
脚本块混淆(就像我在达到此问题时所做的那样)。
我试着用我发现的东西回答这个问题。
我认为你应该已经熟悉了Project.dependencies
脚本块。在这个块中,我们声明了源代码所需的依赖项。有几种方法可以声明项目所需的依赖项。见Gradle Tutorial: Dependency Types。我只提到与此问题最相关的部分:
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'
,我们使用编译configuration声明项目所需的模块依赖关系。
tl; dr:classpath
,compile
和implementation
都是可以在不同情况下用于抵御依赖关系的关键字。如果要将依赖项传递给构建脚本,则使用前者,后者是您可能要声明的configuration之一。