gradle中依赖和依赖之间的区别

时间:2018-05-10 09:26:20

标签: gradle build dependencies

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')
  }
}

1 个答案:

答案 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']
    [...]
}

providesrequireddepends是Groovy列表,稍后会用于存储字符串。

您的第一个代码示例为depends子项目的:tools:bnd-module-plugin 额外属性设置了新列表。

您的第二个使用这些列表将模块(depends)或项目(requires)依赖项添加到所有子项目。

正如您所看到的,depends只是自定义Gradle脚本的一部分,而不是官方Gradle API的一部分,与dependencies不同。