我目前正在开发一个Gradle 5项目,导入两个不同的Maven BOM。因此,我使用本地Gradle语法,而没有依赖项管理插件。但是,两个BOM可以为相同的依赖项定义不同的版本。
dependencies {
implementation platform ("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")
implementation platform ("com.organisation:xyz:${otherBomVersion}")
}
据我所知,在Maven中,定义给定依赖项版本的第一个BOM决定了它。相反,在Gradle依赖项管理插件中,定义给定依赖项版本的最后一个BOM表决定了它。
如何在纯Gradle 5中处理进口BOM的订单?
一个更简单的建议是使用Spring Boot Gradle Plugin文档中描述的这种机制,通过这种机制,您可以显式地覆盖通过设置属性选择的版本。
他们举的例子是:
ext['slf4j.version'] = '1.7.20'
您可以设置的属性的完整列表可以在Spring Boot参考文档中找到。
最后,您将有一个显式的方法来覆盖Spring Boot给出的默认值。
啊,现在我看到你实际上没有使用那个插件,所以这个机制不适用于你。好吧,如果你开始使用它,上面的工作应该是预期的和可预测的。
在Gradle中,BOM的顺序,或者在声明依赖关系的任何地方,根本不重要。与Maven不同的是,Gradle使用了最接近优先的方法,它考虑了所有依赖信息,并选择了最高的。文件说明
Gradle将考虑所有请求的版本,无论它们出现在依赖关系图中的何处。在这些版本中,它将选择最高的版本。
一个实际的例子。以下声明将始终选择2.2。5.发布Spring云依赖项BOM版本定义的Spring云网关的
。SR8无论先列出哪个平台()
声明:
dependencies {
implementation platform('org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR8')
implementation platform('org.springframework.cloud:spring-cloud-dependencies:Greenwich.SR6')
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
}
依赖项洞察报告可能如下所示:
> gradlew -q dependencyInsight --dependency spring-cloud-starter-gateway
org.springframework.cloud:spring-cloud-starter-gateway:2.2.5.RELEASE (by constraint)
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
org.gradle.libraryelements = jar (compatible with: classes)
org.gradle.category = library (not requested)
Requested attributes not found in the selected variant:
org.gradle.dependency.bundling = external
org.gradle.jvm.version = 8
]
org.springframework.cloud:spring-cloud-starter-gateway:2.2.5.RELEASE
\--- org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR8
\--- compileClasspath
org.springframework.cloud:spring-cloud-starter-gateway -> 2.2.5.RELEASE
\--- compileClasspath
如果您更喜欢来自特定BOM的版本,您可以使用强制执行的平台()。
我用我的真实情况来说明问题。 我使用logback 1.0.1进行日志记录,它包含SLF4J 1.6.4作为依赖项。我还为遗留日志API(Java . util . logging、log4j和commons-logging)使用SLF4J API桥,它们不是显式的依赖关系。这些也必须(最好)是版本1.6.4。 为了使我的pom.xml尽可能整洁和无错误,我想强制这些API桥接器与SLF4J版本相
我在使用commons-codec库时遇到(NoSuchMethodError)问题,这里有我的POM:`http://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0 我使用了exclusions和dependencyManagement,但结果是相同的 有人能告诉我更好的解决这个问题的方法吗?
问题内容: 问题。 Gradle依赖管理使得: 没有简便的方法来检查依赖项更新的可用性(仅使用某些第三方插件,如ben-manes / gradle-versions-plugin)并下载更新以替换旧版本; 从远程存储库下载依赖项工件,然后将其存储在gradle缓存中,并在后续构建中重用;但是项目的成功编译必须不依赖于与Internet的连接,远程存储库的可用性以及这些存储库中特定版本的依赖项。
问题。 分级依赖项管理是这样进行的: 检查依赖更新的可用性(仅使用一些第三方插件,如Ben-Manes/Gradle-Versions-Plugin),并下载替换旧版本的更新是不容易的; 依赖项构件从远程存储库下载,然后存储在gradle缓存中,并在后续构建中重用;但项目的成功编译不能依赖于与Internet的连接、远程存储库的可用性以及这些存储库中依赖项的特定版本的存在。 null
对于扩展调试信息,从命令行执行Gradle,使用。/gradlew--info:app:assembleDebug查看工件的dep endency路径。此错误消息来自google-services Gradle插件,在https://github.com/google/play-services-plugins上报告问题,并通过向build.Gradle文件添加“GoogleServices{di
在我们的项目中,我们使用具有依赖项的库,例如: 作为安全修复的一部分,我们假设使用更高版本的依赖项。通用编解码器:通用编解码器:1.14。在不升级expo-file-system的情况下,有没有办法告诉gradle/maven我们要用一个特定版本的commons-codec:commons-codec?