Gradle构建文件中depends
关键字和dependencies
关键字之间的区别是什么?我在以下背景中遇到了这些关键字:
取决于:
project(':tools:bnd-module-plugin') {
description = "bnd plugin to build moduleinfo with ${rootProject.description}"
sourceSets.main.java.srcDirs += project(':asm').sourceSets.main.java.srcDirs
depends = ['biz.aQute.bnd:biz.aQute.bnd:3.4.0']
}
依赖关系:
subprojects {
apply plugin: 'com.github.sherter.google-java-format'
googleJavaFormat.toolVersion = '1.4'
compileTestJava {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
dependencies {
requires.each { projectName -> compile project(projectName) }
depends.each { artifactName -> compile artifactName }
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0',
'org.junit.jupiter:junit-jupiter-params:5.1.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
testCompile project(':asm-test')
}
}
答案 0 :(得分:1)
dependencies
关键字由a method实例的Project
提供,build.gradle
文件针对其进行评估。它允许通过DependencyHandler
配置多种类型的依赖项。您可以添加文件依赖项,项目依赖项和模块依赖项,这些可以从Maven和Ivy存储库中解析。
由于它是由Project
实例直接提供的,因此可以在每个 Gradle项目中使用。
Gradle API中不存在depends
关键字。但是,Gradle提供了许多扩展和编程构建脚本的可能性。通过所谓的额外属性,可以在Gradle对象的范围内定义其他属性,如任务和项目。然后,可以像在示例中一样使用这些附加属性,就像常规的Gradle属性一样。
我在网上找到了你的例子full build script。在脚本的开头,subprojects
闭包用于为所有子项目定义额外属性:
subprojects {
[...]
ext.provides = [] // The provided java packages, e.g. ['org.objectweb.asm']
ext.requires = [] // The required Gradle projects, e.g. [':asm-test']
ext.depends = [] // The external dependencies, e.g. ['junit:junit:4.12']
[...]
}
provides
,required
和depends
是Groovy列表,稍后会用于存储字符串。
您的第一个代码示例为depends
子项目的:tools:bnd-module-plugin
额外属性设置了新列表。
您的第二个使用这些列表将模块(depends
)或项目(requires
)依赖项添加到所有子项目。
正如您所看到的,depends
只是自定义Gradle脚本的一部分,而不是官方Gradle API的一部分,与dependencies
不同。