错误 JacksonVersion - 不支持包 'jackson-databind' 版本“2.9.4”

ERROR JacksonVersion - Version '2.9.4' of package 'jackson-databind' is not supported

我正在使用 azure sdk(azure-storage-file-datalake、azure-core、azure-identity)将 avro 数据从 kafka(使用连接器)写入 azure datalake gen 2,但我变得很奇怪错误如下

2022-05-12 10:46:10 错误 JacksonVersion:506 - 不支持软件包 'jackson-annotations' 的“2.9.4”版本(早于支持的最早版本 - 2.10.0),请升级。

2022-05-12 10:46:10 错误 JacksonVersion:506 - 不支持软件包 'jackson-core' 的“2.9.4”版本(早于支持的最早版本 - 2.10.0),请升级。

2022-05-12 10:46:10 错误 JacksonVersion:506 - 不支持软件包 'jackson-databind' 的“2.9.4”版本(早于支持的最早版本 - 2.10.0),请升级。

java.lang.LinkageError:包版本:jackson-annotations=2.9.4,jackson-core=2.9.4,jackson-databind=2.9.4,jackson-dataformat-xml=unknown, jackson-datatype-jsr310=未知,azure-core=1.28.0,版本冲突疑难解答:https://aka.ms/azsdk/java/dependency/troubleshoot\n\tat com.azure.core.implementation

我已经尝试排除 jackson 依赖项并尝试显式添加,但我仍然遇到错误。

请有人帮忙

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.13.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.13.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.13.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.13.2</version>
    <scope>runtime</scope>
</dependency>
    <dependencies>


    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>connect-api</artifactId>
        <version>2.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!--<dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>1.1.0</version>
        <scope>provided</scope>
    </dependency>-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <!-- Apache avro dependency -->
    <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro</artifactId>
        <version>1.8.2</version>
    </dependency>
    <!-- Newer versions of the storage account jar is not working. -->
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-storage-file-datalake</artifactId>
        <version>12.9.0</version>
        <exclusions>
            <exclusion>
                <groupId>com.azure</groupId>
                <artifactId>azure-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.azure/azure-core -->
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-core</artifactId>
        <version>1.28.0</version>
        <exclusions>
            <!-- Collision with Kafka Jackson dependencies -->
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.fasterxml.jackson.dataformat</groupId>
                <artifactId>jackson-dataformat-xml</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-jsr310</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.5.1</version>
        <exclusions>
            <exclusion>
                <groupId>com.azure</groupId>
                <artifactId>azure-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.microsoft.azure</groupId>
                <artifactId>msal4j</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.linguafranca.pwdb</groupId>
                <artifactId>KeePassJava2</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>msal4j</artifactId>
        <version>1.9.1</version> <!-- {x-version-update;com.microsoft.azure:msal4j;external_dependency} -->
        <exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- Schema registry dependency -->

    <dependency>
        <groupId>io.confluent</groupId>
        <artifactId>kafka-connect-avro-converter</artifactId>
        <version>3.3.0</version>
        <exclusions>
            <exclusion>
            <groupId>io.confluent</groupId>
            <artifactId>kafka-schema-registry-client</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>io.confluent</groupId>
        <artifactId>kafka-schema-registry-client</artifactId>
        <version>3.3.0</version>
        <exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.21.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>






</dependencies>

范围为“运行时”的依赖项不用于编译,仅用于执行。具有此范围的依赖项不会放在编译类路径中,因此您可以删除运行时范围。

然而,覆盖您自己不使用的传递依赖版本的更好方法是像这样使用依赖管理:

<project>
  [...]
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>group-a</groupId>
        <artifactId>artifact-a</artifactId>
        <version>1.0</version>
      </dependency>
    [...]
    </dependencies>
  </dependencyManagement>
</project>

这是对 Azure-SDK 的挑战(这里是一个类似的 issue)。 Azure-SDK 依赖杰克逊。 Jackson 的具体版本取决于您使用的 azure-sdk 版本。

最新版本supports Jackson 2.10-2.13。这意味着您可能对 Jackson 有其他依赖,而 SDK 仍然可以工作。提供的 Jackson 版本是从 2.10-2.13 获取的。 Azure-SDK 与所有这些版本兼容。

如果您希望使用 Jackson 2.9(或者如果它作为其他依赖项的依赖项出现),那么没有办法绕过它。 您必须升级您的依赖项才能获取 jackson 2.10 及更高版本

在您的情况下,会有一些依赖项正在获取 2.9.x 系列。

这就是我要做的:

  1. 基于所有非azure-sdk 依赖项。决定保留哪个杰克逊版本。在 pom.xml
  2. 中显式添加此 jackson 依赖项
  3. 使用azure-sdkBOM
  4. 您不必指定排除。在pom中指定一个版本overrides其他依赖版本

托管环境有那些 2.9.4 版本的 jackson jar,它们在 运行 时加载并导致了问题,我用更新版本的 jar 替换了它们,现在一切正常。 (我们在主机上安装了 kafka 客户端,它内部有那些罐子 kafka/libs)

得到答案 - https://github.com/Azure/azure-sdk-for-java/issues/28902