本章解释如何将基本的依赖管理概念应用于基于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'
}

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

使用依赖配置

A 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将按照它们指定的顺序在每个仓库中查找依赖项,并在找到请求的模块的第一个仓库处停止。

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

发布构件

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