本章说明如何将基本的依赖管理概念应用于基于JVM的项目. 有关依赖管理的详细介绍,请参见Gradle中的依赖管理 .

Dissecting a typical build script

让我们看一下基于JVM的项目的非常简单的构建脚本. 它应用了Java库插件 ,该插件会自动引入标准项目布局,提供执行典型工作的任务以及对依赖项管理的充分支持.

示例1.基于JVM的项目的依赖项声明
build.gradle
plugins {
    id 'java-library'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.hibernate:hibernate-core:3.6.7.Final'
    api 'com.google.guava:guava:23.0'
    testImplementation 'junit:junit:4.+'
}
build.gradle.kts
plugins {
    `java-library`
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.hibernate:hibernate-core:3.6.7.Final")
    api("com.google.guava:guava:23.0")
    testImplementation("junit:junit:4.+")
}

Project.dependencies {}代码块声明需要Hibernate core 3.6.7.Final来编译项目的生产源代码. 它还指出,要编译项目的测试,需要junit> = 4.0. 所有依赖项都应该在Project.repositories {}定义的Maven Central存储库中进行查找. 以下各节将更详细地说明每个方面.

Declaring module dependencies

您可以声明各种类型的依赖项 . 一种这样的类型是模块依赖性 . 模块依赖关系表示对具有当前版本之外构建的特定版本的模块的依赖关系. 模块通常存储在存储库中,例如Maven Central,公司Maven或Ivy存储库或本地文件系统中的目录.

要定义模块依赖项,请将其添加到依赖项配置中

例子2.模块依赖关系的定义
build.gradle
dependencies {
    implementation 'org.hibernate:hibernate-core:3.6.7.Final'
}
build.gradle.kts
dependencies {
    implementation("org.hibernate:hibernate-core:3.6.7.Final")
}

要了解有关定义依赖项的更多信息,请参阅声明依赖项 .

Using dependency configurations

配置是一组命名的依赖关系和工件. 有一个配置的三个主要目的:

Declaring dependencies

插件使用配置使构建作者可以轻松声明在执行插件定义的任务期间出于各种目的还需要其他哪些子项目或外部工件. 例如,一个插件可能需要Spring Web框架依赖项来编译源代码.

Resolving dependencies

插件使用配置来查找(可能下载)其定义的任务的输入. 例如,Gradle需要从Maven Central下载Spring Web框架JAR文件.

Exposing artifacts for consumption

插件使用配置来定义它生成供其他项目使用的工件 . 例如,该项目希望将其打包在JAR文件中的已编译源代码发布到内部Artifactory存储库中.

考虑到这三个目的,让我们看一下Java库插件定义的一些标准配置 .

implementation

编译项目生产源所需的依赖项,这些依赖项不是项目公开的API的一部分. 例如,该项目将Hibernate用于其内部持久层实现.

api

所需要的依赖关系来编译该项目其由所述项目露出的API的一部分的产生源. 例如,该项目使用Guava,并在其方法签名中公开带有Guava类的公共接口.

testImplementation

编译和运行项目的测试源所需的依赖项. 例如,项目决定使用测试框架JUnit编写测试代码.

各种插件添加了进一步的标准配置. 您还可以通过Project.configurations {}在构建中定义自己的自定义配置. 有关定义和自定义依赖项配置的详细信息,请参阅什么是依赖项配置.

Declaring common Java repositories

Gradle如何知道在哪里可以找到外部依赖文件? Gradle在存储库中查找它们. 信息库是按groupnameversion组织的模块的集合. Gradle了解不同的存储库类型 ,例如Maven和Ivy,并支持通过HTTP或其他协议访问存储库的各种方式.

默认情况下,Gradle不定义任何存储库. 您需要在Project.repositories {}的帮助下定义至少一个,然后才能使用模块依赖项. 一种选择是使用Maven Central存储库:

例子3. Maven中央仓库的使用
build.gradle
repositories {
    mavenCentral()
}
build.gradle.kts
repositories {
    mavenCentral()
}

You can also have repositories on the local file system. This works for both Maven and Ivy repositories.

例子4.本地Ivy目录的用法
build.gradle
repositories {
    ivy {
        // URL can refer to a local directory
        url "../local-repo"
    }
}
build.gradle.kts
repositories {
    ivy {
        // URL can refer to a local directory
        url = uri("../local-repo")
    }
}

一个项目可以有多个存储库. Gradle将按照指定的顺序在每个存储库中查找依赖项,并在包含请求模块的第一个存储库处停止.

要了解有关定义存储库的更多信息,请参阅声明存储库 .

Publishing artifacts

要了解有关发布工件的更多信息,请查看发布插件 .