Gradle 中的依赖项解析很大程度上可以被认为是一个两步过程。

首先,图解析阶段基于声明的依赖项构建依赖关系图。 其次,构件解析阶段获取已解析组件的实际文件(构件)

  1. 图解析阶段:

    • 由声明的依赖项及其元数据驱动

    • 使用正在解析的配置定义的请求属性

  2. 构件解析阶段:

    • 基于已解析依赖关系图中的节点

    • 将每个节点匹配到一个变体和一个构件

这些过程的结果可以通过不同的 API 访问,每个 API 专为特定用例而设计。

1. 图解析

图解析阶段,Gradle 下载并分析声明的和传递依赖项的组件元数据(GMM、POM 或 Ivy XML)。 此信息用于构建依赖关系图,该图对不同组件及其变体之间的关系进行建模。 您可以在理解依赖项解析模型中了解有关如何构建图的更多信息。

ResolutionResult API 表示图解析阶段的输出,提供对已解析依赖关系图的访问,而无需触发构件下载。 该图本身侧重于组件变体,而不是与这些变体关联的构件(文件)

请参阅图解析以了解更多信息。

2. 构件解析

一旦依赖关系图被解析,构件解析阶段将确定需要下载或检索哪些实际文件(构件)。

ArtifactView 在已解析图的顶部运行,由ResolutionResult定义。 它允许您根据属性查询特定构件。 在图解析期间使用的相同属性通常指导构件选择

ArtifactView API 提供了灵活的方式来访问这些已解析的构件

  • FileCollection - 平面文件列表,这是使用已解析构件的最常见方式。

  • ArtifactCollection - 提供对已解析构件的元数据和文件的访问,从而允许更高级的构件处理。

请参阅构件解析以了解更多信息。

控制解析

ArtifactTransform 在依赖项解析期间修改构件的内容,例如将 JAR 文件转换为自定义格式。

ArtifactView 允许自定义构件选择过程,例如过滤组件或请求触发构件转换的属性。

当一起使用时

  1. 注册 ArtifactTransform 以处理构件。

  2. 配置 ArtifactView 以基于与原始图不同的属性选择构件。

  3. 通过 ArtifactView 查询转换后的构件以访问或处理转换后的文件。

请参阅构件视图构件转换以了解更多信息。