Netty 版本与 azure-identity、azure-storage-file-datalake java sdk 冲突

问题描述 投票:0回答:1

我正在尝试在我的项目中实现 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版本

java azure gradle azure-identity sas-token
1个回答
0
投票

Netty 版本与 azure-identity、azure-storage-file-datalake java sdk 冲突。

根据这个文档(1.14.2)

  • 将 Netty 依赖项从
    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

© www.soinside.com 2019 - 2024. All rights reserved.