错误杰克逊版本 - 不支持包'jackson-databind'的版本 '2.9.4'



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

2022-05-12 10:46:10 ERROR JacksonVersion:506 - package 'jackson-annotations'的'2.9.4'版本不受支持(比最早支持的版本- 2.10.0早),请升级。

2022-05-12 10:46:10 ERROR JacksonVersion:506 - package 'jackson-core'的'2.9.4'版本不支持(比最早支持的版本- 2.10.0早),请升级。

2022-05-12 10:46:10 ERROR JacksonVersion:506 - package 'jackson-databind'的'2.9.4'版本不支持(比最早支持的版本- 2.10.0早),请升级。

. lang。LinkageError: Package versions: jackson-annotations=2.9.4, jackson-core=2.9.4, jackson-databind=2.9.4, jackson-dataformat-xml=unknown, jackson- datattype -jsr310=unknown, azure-core=1.28.0, version conflicts: https://aka.ms/azsdk/java/dependency/troubleshootntat 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的一个挑战(这里有一个类似的问题)。Azure-SDK依赖于Jackson。Jackson的具体版本取决于您正在使用的azure-sdk版本。

最新版本支持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依赖项使用azure-sdk BOM
  3. 你不必指定排除。在pom中指定一个版本将覆盖其他依赖版本

托管环境中有那些在运行时加载并导致问题的2.2.9.4版本的jackson jar,我用新版本的jar替换了那些,现在工作得很好。(我们已经在主机上安装了kafka客户端,在kafka/libs内部有这些jar)

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

最新更新