本章解释了如何将基本的依赖项管理概念应用于基于 JVM 的项目。有关依赖项管理的详细介绍,请参阅Gradle 中的依赖项管理。
解析典型的构建脚本
让我们看看一个非常简单的基于 JVM 的项目的构建脚本。它应用了Java 库插件,该插件会自动引入标准的项目布局,提供执行典型工作的任务,并为依赖项管理提供充分支持。
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")
}
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 仓库,或本地文件系统中的目录。
要定义模块依赖项,请将其添加到依赖项配置中
dependencies {
implementation("org.hibernate:hibernate-core:3.6.7.Final")
}
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 会在仓库中查找它们。仓库是模块的集合,按 group
、name
和 version
进行组织。Gradle 支持不同的仓库类型,例如 Maven 和 Ivy,并支持通过 HTTP 或其他协议访问仓库的多种方式。
默认情况下,Gradle 不定义任何仓库。在使用模块依赖项之前,您需要借助Project.repositories{} 定义至少一个仓库。一个选项是使用 Maven Central 仓库
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 = file("../local-repo")
}
}
一个项目可以有多个仓库。Gradle 会按指定的顺序在每个仓库中查找依赖项,在第一个包含所需模块的仓库处停止。
要了解更多关于定义仓库的信息,请参阅声明仓库。