我正在尝试在我的项目中实现 ADLS 令牌凭证出售,具有以下依赖项:
// 1.13.1
implementation(libs.azure.identity)
// 12.20.0
implementation(libs.azure.storage.file.datalake)
但是,当我运行项目时,它抛出一个初始化错误,这是由Netty冲突引起的:
{"az.sdk.message":"The following Netty versions were found on the classpath and have a mismatch with the versions used by azure-core-http-netty. If your application runs without issue this message can be ignored, otherwise please align the Netty versions used in your application. For more information, see https://aka.ms/azsdk/java/dependency/troubleshoot.","azure-netty-version":"4.1.110.Final","azure-netty-native-version":"2.0.65.Final","classpath-netty-version-io.netty:netty-common":"4.1.112.Final","classpath-netty-version-io.netty:netty-handler":"4.1.112.Final","classpath-netty-version-io.netty:netty-handler-proxy":"4.1.110.Final","classpath-netty-version-io.netty:netty-buffer":"4.1.112.Final","classpath-netty-version-io.netty:netty-codec":"4.1.112.Final","classpath-netty-version-io.netty:netty-codec-http":"4.1.112.Final","classpath-netty-version-io.netty:netty-codec-http2":"4.1.112.Final","classpath-netty-version-io.netty:netty-transport-native-unix-common":"4.1.112.Final","classpath-netty-version-io.netty:netty-transport-native-epoll":"4.1.110.Final","classpath-netty-version-io.netty:netty-transport-native-kqueue":"4.1.110.Final","classpath-native-netty-version-io.netty:netty-tcnative-boringssl-static":"2.0.65.Final"}
之前,我尝试使用以下配置排除 azure-core-http-netty:
implementation(libs.azure.identity) {
exclude(group = "com.azure", module = "azure-core-http-netty")
}
implementation(libs.azure.storage.file.datalake) {
exclude(group = "com.azure", module = "azure-core-http-netty")
}
但这并没有解决问题并导致了额外的错误。
如何正确导入这些依赖并解决冲突?
我真的很想知道,如何调试它并找到解决方案。
我的项目类路径依赖项 https://gist.github.com/orenccl/0c4ef46e22b0fb1f80bb16d3979d381b
好像azure sdk必须使用netty 4.1.110,但我的其他模块也必须使用4.1.112
我可以要求他们使用不同的版本并且不冲突吗?
附注我的项目使用java 8,所以我无法升级azure sdk版本
Netty 版本与 azure-identity、azure-storage-file-datalake java sdk 冲突。
根据这个文档(1.14.2)
4.1.101.Final
升级到 4.1.108.Final
。好像azure sdk必须使用netty 4.1.110,但我的其他模块也必须使用4.1.112 我可以要求他们使用不同的版本而不冲突吗?
您可以使用
Shadow
来处理项目中的 Netty 的多个版本,方法是“重新定位”冲突版本或“在所有依赖项中强制使用单个版本”。这种方法将有助于解决版本冲突,让您的项目顺利运行。
如果 azure-sdk
需要 Netty 4.1.110
,您可以遮盖其他库使用的 Netty
4.1.112
。plugins {
id 'java'
id 'com.github.xxxx.shadow' version '8.1.1'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.azure:azure-storage-file-datalake:12.20.0'
implementation 'com.azure:azure-identity:1.13.1'
// Other dependencies
}
configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'io.netty') {
details.useVersion '4.1.112.Final' // Force the desired Netty version
}
}
}
shadowJar {
relocate 'io.netty', 'com.yourcompany.shadow.netty' // Relocate Netty to avoid conflicts
mergeServiceFiles()
}
检查以下参考,就像您的错误一样。
参考资料:
[BUG] azure-core-http-netty 1.14.2 包含错误的 netty.version 属性 · 问题 #39583 · Azure/azure-sdk-for-java