本章解释了如何将基本的依赖项管理概念应用于基于 JVM 的项目。有关依赖项管理的详细介绍,请参阅Gradle 中的依赖项管理

解析典型的构建脚本

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

build.gradle.kts
plugins {
    `java-library`
}

repositories {
    mavenCentral()
}

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

repositories {
    mavenCentral()
}

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

Project.dependencies{} 代码块声明了编译项目生产源代码需要 Hibernate core 3.6.7.Final。它还声明了编译项目测试需要 junit >= 4.0。所有依赖项都应在Project.repositories{} 定义的 Maven Central 仓库中查找。以下章节将更详细地解释每个方面。

声明模块依赖项

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

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

build.gradle.kts
dependencies {
    implementation("org.hibernate:hibernate-core:3.6.7.Final")
}
build.gradle
dependencies {
    implementation 'org.hibernate:hibernate-core:3.6.7.Final'
}

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

使用依赖项配置

一个配置 (Configuration) 是一个命名好的依赖项和制品的集合。一个配置有三个主要用途:

声明依赖项

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

解析依赖项

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

暴露制品供使用

插件使用配置来定义它生成哪些制品供其他项目使用。例如,项目可能希望将其打包在 JAR 文件中的编译后的源代码发布到内部 Artifactory 仓库。

牢记这三个用途,我们来看看Java 库插件定义的一些标准配置

implementation

编译项目生产源代码所需的依赖项,这些依赖项是项目暴露的 API 的一部分。例如,项目使用 Hibernate 实现其内部持久层。

api

编译项目生产源代码所需的依赖项,这些依赖项项目暴露的 API 的一部分。例如,项目使用 Guava 并在方法签名中暴露带有 Guava 类的公共接口。

testImplementation

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

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

声明常用 Java 仓库

Gradle 如何知道在哪里找到外部依赖项的文件?Gradle 会在仓库中查找它们。仓库是模块的集合,按 groupnameversion 进行组织。Gradle 支持不同的仓库类型,例如 Maven 和 Ivy,并支持通过 HTTP 或其他协议访问仓库的多种方式。

默认情况下,Gradle 不定义任何仓库。在使用模块依赖项之前,您需要借助Project.repositories{} 定义至少一个仓库。一个选项是使用 Maven Central 仓库

build.gradle.kts
repositories {
    mavenCentral()
}
build.gradle
repositories {
    mavenCentral()
}

您也可以在本地文件系统上设置仓库。这适用于 Maven 和 Ivy 仓库。

build.gradle.kts
repositories {
    ivy {
        // URL can refer to a local directory
        url = uri("../local-repo")
    }
}
build.gradle
repositories {
    ivy {
        // URL can refer to a local directory
        url = file("../local-repo")
    }
}

一个项目可以有多个仓库。Gradle 会按指定的顺序在每个仓库中查找依赖项,在第一个包含所需模块的仓库处停止。

要了解更多关于定义仓库的信息,请参阅声明仓库

发布制品

要了解更多关于发布制品的信息,请参阅发布插件