【发布时间】:2020-07-19 21:02:53
【问题描述】:
我正在尝试学习如何在多项目设置中使用“平台”来对齐项目之间的依赖版本。到目前为止,我已经看到:
- https://docs.gradle.org/6.2.1/userguide/platforms.html
- https://docs.gradle.org/6.2.1/userguide/dependency_management_terminology.html#sub::terminology_platform
- https://docs.gradle.org/6.2.1/userguide/dependency_version_alignment.html#sec:virtual_platform
- https://docs.gradle.org/6.2.1/userguide/dependency_constraints.html#sec:adding-constraints-transitive-deps
- https://docs.gradle.org/6.2.1/userguide/java_platform_plugin.html
- ... 以及一些试图找到示例的外部站点,例如 https://dzone.com/articles/gradle-goodness-use-bill-of-materials-bom-as-depen
我了解如何在项目中声明约束。我想我也了解如何为此目的使用 BOM。但是,我想为此目的使用“强制平台项目”,但这里有很多东西我不明白:
- 我是否必须使用“java 平台”插件?我们有非 Java 项目。我们的配置不太适合“api”和“运行时”存储桶。
- 即使我们都是 Java,对于任何一个项目,我们都不能为其“api”和“运行时”提供单独的版本。虽然我确实了解这在某些情况下可能提供的控制级别,但我不明白这些是如何协同工作以确保项目获得指定的依赖关系的。
- Gradle 如何知道使用平台的项目与平台规范之间要匹配哪些配置的约束? 我想我看到了定义“api”和平台中其他约束的示例,我“理解”了项目将通过声明 api platform(project(':platform')) 来引用它。我希望 Gradle 不会试图通过简单的名称匹配来将“api”与“api”匹配。我需要多个不同的依赖项配置来与同一个平台“配置”保持一致,无论它被称为什么。
总的来说,我没有找到足够的信息来对它的作用或工作原理有信心。有人可以填写空白或指向一些显示比上述更多示例和详细信息的文件吗?目前我不明白我应该为那个平台项目(它的build.gradle)实际写什么和/或如何从我们现有的项目中正确引用它。
谢谢!
更新 1:在https://discuss.gradle.org/t/can-someone-tell-me-what-i-am-doing-wrong-to-align-dependency-versions-across-projects/35601 发布了一个最小的实验来测试我(缺乏)对此的理解......
【问题讨论】:
标签: gradle gradle-dependencies gradle-multi-project-build gradle-groovy-dsl