本章介绍如何将基本的依赖关系管理概念应用于基于 JVM 的项目。有关依赖管理的详细介绍,请参阅Gradle 中的依赖管理。
剖析典型的构建脚本
让我们看一下基于 JVM 项目的非常简单的构建脚本。它应用Java 库插件,该插件自动引入标准项目布局,提供执行典型工作的任务以及对依赖关系管理的充分支持。
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.+")
}
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.+'
}
Project.dependency {}代码块声明编译项目的生产源代码需要 Hibernate 核心 3.6.7.Final。它还指出编译项目的测试需要 junit >= 4.0。所有依赖项都应该在Project.repositories{}定义的 Maven 中央存储库中查找。以下部分更详细地解释了每个方面。
声明模块依赖关系
您可以声明多种类型的依赖关系。其中一种类型是模块依赖性。模块依赖项表示对在当前构建之外构建的特定版本的模块的依赖项。模块通常存储在存储库中,例如 Maven Central、企业 Maven 或 Ivy 存储库,或者本地文件系统中的目录。
要定义模块依赖项,请将其添加到依赖项配置中:
dependencies {
implementation("org.hibernate:hibernate-core:3.6.7.Final")
}
dependencies {
implementation 'org.hibernate:hibernate-core:3.6.7.Final'
}
要了解有关定义依赖项的更多信息,请查看声明依赖项。
使用依赖配置
配置是一组命名的依赖项和工件。配置有三个主要目的:
- 声明依赖关系
-
插件使用配置使构建作者可以轻松声明在执行插件定义的任务期间出于各种目的需要哪些其他子项目或外部工件。例如,插件可能需要 Spring Web 框架依赖项来编译源代码。
- 解决依赖关系
-
插件使用配置来查找(并可能下载)其定义的任务的输入。例如,Gradle 需要从 Maven Central 下载 Spring Web 框架 JAR 文件。
- 暴露文物以供消费
-
插件使用配置来定义它生成哪些工件供其他项目使用。例如,该项目希望将打包在 JAR 文件中的已编译源代码发布到内部 Artifactory 存储库。
考虑到这三个目的,让我们看一下Java Library Plugin 定义的一些标准配置。
- 执行
-
编译项目生产源所需的依赖项不属于项目公开的 API 的一部分。例如,该项目使用 Hibernate 来实现其内部持久层。
- 应用程序编程接口
-
编译项目的生产源所需的依赖项是项目公开的 API 的一部分。例如,该项目使用 Guava 并在其方法签名中公开带有 Guava 类的公共接口。
- 测试实施
-
编译和运行项目的测试源所需的依赖项。例如,该项目决定使用测试框架 JUnit 编写测试代码。
各种插件添加了更多标准配置。您还可以通过Project.configurations{}在构建中定义自己的自定义配置。有关定义和自定义依赖项配置的详细信息,请参阅什么是依赖项配置。
声明公共 Java 存储库
Gradle 如何知道在哪里可以找到外部依赖项的文件? Gradle 在存储库中查找它们。存储库是模块的集合,由group
、name
和组织version
。 Gradle 理解不同的存储库类型,例如 Maven 和 Ivy,并支持通过 HTTP 或其他协议访问存储库的各种方式。
默认情况下,Gradle 不定义任何存储库。您需要在Project.repositories{}的帮助下至少定义一个,然后才能使用模块依赖项。一种选择是使用 Maven 中央存储库:
repositories {
mavenCentral()
}
repositories {
mavenCentral()
}
您还可以在本地文件系统上拥有存储库。这适用于 Maven 和 Ivy 存储库。
repositories {
ivy {
// URL can refer to a local directory
url = uri("../local-repo")
}
}
repositories {
ivy {
// URL can refer to a local directory
url "../local-repo"
}
}
一个项目可以有多个存储库。 Gradle 将按照指定的顺序在每个存储库中查找依赖项,并在包含所请求模块的第一个存储库处停止。
要了解有关定义存储库的更多信息,请查看声明存储库。