本章解释如何将基本的依赖管理概念应用于基于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'
}
要了解更多关于定义依赖项的信息,请参阅声明依赖项。
使用依赖配置
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会在仓库中查找它们。仓库是模块的集合,按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将按照它们指定的顺序在每个仓库中查找依赖项,并在找到请求的模块的第一个仓库处停止。
要了解更多关于定义仓库的信息,请参阅声明仓库。