依赖管理有大量的术语。在这里您可以找到最常用的术语,包括参考用户指南以了解其实际应用。

人工制品

由构建生成的文件或目录,例如 JAR、ZIP 发行版或本机可执行文件。

工件通常设计为供用户或其他项目使用或消耗,或部署到托管系统。在这种情况下,工件是单个文件。在项目间依赖的情况下,目录很常见,以避免产生可发布工件的成本。

能力

能力标识由一个或多个组件提供的功能。功能由类似于模块版本所用坐标的坐标来标识。默认情况下,每个模块版本都提供与其坐标相匹配的功能,例如com.google:guava:18.0.功能可用于表示组件提供多个功能变体或两个不同的组件实现相同的功能(因此不能一起使用)。有关更多详细信息,请参阅功能部分。

成分

模块的任何单一版本。

对于外部库,术语“组件”是指该库的一个已发布版本。

在构建中,组件由插件(例如Java 库插件)定义,并提供一种简单的方法来定义要发布的出版物。它们包含工件以及详细描述组件变体的适当元数据。例如,默认设置中的组件由任务生成的 JAR以及 Java api运行时变体的依赖信息组成。它还可以定义其他变体,例如Javadoc以及相应的工件。javajar

配置

配置是为了特定目标而分组在一起的一组指定的依赖项。配置提供对底层、已解析模块及其工件的访问。有关更多信息,请参阅有关依赖项配置以及可解析和可使用配置的部分。

“配置”这个词是一个重载的术语,在依赖关系管理的上下文之外具有不同的含义。

依赖性

依赖项是指向构建、测试或运行模块所需的另一软件的指针。有关更多信息,请参阅声明依赖项部分。

依赖约束

依赖性约束定义了模块需要满足的要求,以使其成为依赖性的有效解析结果。例如,依赖性约束可以缩小支持的模块版本集的范围。依赖约束可以用来表达传递依赖的这种要求。有关更多信息,请参阅有关升级降级传递依赖项的部分。

特征变体

特征变体是表示可以单独选择或不单独选择的组件特征的变体。功能变体由一个或多个功能来标识。有关更多信息,请参阅有关建模特征变体和可选依赖项的部分。

模块

一个随着时间的推移而发展的软件,例如Google Guava。每个模块都有一个名称。模块的每个版本都由模块版本最佳地表示。为了方便使用,模块可以托管在存储库中。

模块元数据

模块的发布提供元数据。元数据是更详细地描述模块的数据,例如有关工件位置或所需传递依赖项的信息。 Gradle 提供了自己的元数据格式,称为Gradle 模块元数据.module文件),但也支持 Maven ( .pom) 和 Ivy ( ivy.xml) 元数据。有关支持的元数据格式的更多信息,请参阅了解 Gradle 模块元数据部分。

组件元数据规则

组件元数据规则是在从存储库获取组件的元数据之后修改组件的元数据的规则,例如添加缺失的信息或纠正错误的信息。与解析规则相反,组件元数据规则在解析开始之前应用。组件元数据规则被定义为构建逻辑的一部分,并且可以通过插件共享。有关更多信息,请参阅有关使用组件元数据规则修复元数据的部分。

模块版本

模块版本代表已发布模块的一组不同的更改。例如18.0用坐标 表示模块的版本com.google:guava:18.0。实际上,模块版本的方案没有限制。时间戳、数字、特殊后缀等-GA都是允许的标识符。最广泛使用的版本控制策略是语义版本控制

平台

平台是一组旨在一起使用的模块。平台有不同类别,对应不同的用例:

  • 模块集:通常是作为一个整体发布的一组模块。使用该集合中的一个模块通常意味着我们希望对该集合中的所有模块使用相同的版本。例如,如果使用groovy1.2,则也使用groovy-json1.2。

  • 运行时环境:一组已知可以很好地协同工作的库。例如,Spring 平台,推荐 Spring 以及与 Spring 配合良好的组件的版本。

  • 部署环境:Java运行时、应用程序服务器……​

此外Gradle还定义了虚拟平台

Maven 的 BOM(物料清单)是Gradle 支持的一种流行平台。

出版物

对应作为单个实体发布到存储库以供消费者使用的文件和元数据的描述。

出版物有一个名称,由一个或多个工件以及有关这些工件的信息(元数据)组成。

存储库

存储库托管一组模块,每个模块可以提供由模块版本指示的一个或多个版本(组件) 。存储库可以基于二进制存储库产品(例如 Artifactory 或 Nexus)或文件系统中的目录结构。有关更多信息,请参阅声明存储库

决议规则

解析规则影响直接解析依赖关系的行为。解析规则被定义为构建逻辑的一部分。有关更多信息,请参阅直接自定义依赖项解析部分。

传递依赖

组件的变体可以依赖于其他模块才能正常工作,即所谓的传递依赖。存储库上托管的模块的版本可以提供元数据来声明这些传递依赖项。默认情况下,Gradle 会自动解析传递依赖项。传递依赖性的版本选择可以通过声明依赖性约束来影响。

(组件的)变体

每个组件由一个或多个变体组成。变体由一组工件组成并定义一组依赖关系。它由一组属性功能来标识。

Gradle 的依赖项解析是变体感知的,并在选择组件(即模块的一个版本)后选择每个组件的一个或多个变体。如果变体选择结果不明确,这意味着 Gradle 没有足够的信息来选择多个互斥变体之一,它也可能会失败。在这种情况下,可以通过变体属性提供更多信息。每个 Java 组件通常提供的变体示例是api运行时变体。其他示例是 JDK8 和 JDK11 变体。有关更多信息,请参阅变体选择部分。

变体属性

属性用于识别和选择变体。变体定义了一个或多个属性,例如org.gradle.usage=java-apiorg.gradle.jvm.version=11解决依赖关系后,会请求一组属性,Gradle 会为依赖关系图中的每个组件找到最合适的变体。可以为属性实现兼容性和消歧规则,以表达值之间的兼容性(例如,Java 8 与 Java 11 兼容,但如果请求的版本是 11 或更高版本,则应首选 Java 11)。此类规则通常由插件提供。有关更多信息,请参阅有关变体选择声明属性的部分。