java - 尝试在 Kafka 中创建分区时出现 NoClassDefFoundError
问题描述
我有以下代码:
public KafkaReader(KafkaConsumer<Long, byte[]> consumer, String topic) {
this.consumer = consumer;
this.topicPartition = new TopicPartition(topic, ((consumer.partitionsFor(topic).get(0)).partition()));
consumer.assign(Collections.singleton(topicPartition));
}
但是当执行 consumer.partitionsFor(topic) 时,我收到以下错误:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/JsonNode
at org.apache.kafka.common.requests.MetadataRequest$Builder.<clinit>(MetadataRequest.java:36)
at org.apache.kafka.clients.consumer.KafkaConsumer.partitionsFor(KafkaConsumer.java:1962)
at org.apache.kafka.clients.consumer.KafkaConsumer.partitionsFor(KafkaConsumer.java:1930)
at data.KafkaReader.<init>(KafkaReader.java:20)
at data.KafkaReaderTest.playground(KafkaReaderTest.java:12)
...引起:java.lang.ClassNotFoundException:com.fasterxml.jackson.databind.JsonNode at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal .loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 68 更多
在 pom.xml 我定义了以下依赖项:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.10</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.10</version>
</dependency>
</dependencies>
我发现的所有建议都是将 jackson-annotations 和 -core 添加到 maven 依赖项,但这没有帮助。
解决方案
ClassNotFoundException:com.fasterxml。jackson.databind .JsonNode
所以你需要
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.10</version>
</dependency>
但是,您真的应该使用jackson-bom
一致地导入所有相关的依赖版本
推荐阅读
- web - 任何人都知道 objkt.link/[number] 如何使它重定向到 hicetnunc.xyz/objkt/[number]?
- c++ - 如何使用 fscanf() 扫描宽度 = 2 的 UINT?
- typescript - 当数组标记为 const 时创建类型保护
- python - fold/col2im 用于 numpy 中的卷积
- segmentation-fault - 具有分段错误错误的 mpi_send 和 mpi_recv
- java - 如何让我的java程序在双击执行时使用我的自定义JRE,而不是安装默认的JDK?
- reactjs - 如何使用 reactfire 等待我的用户身份验证
- c++ - C++ 使用 delete 和 new 运算符的单链表内存泄漏
- android - 在 Logcat android 应用程序中隐藏信息和错误日志
- android - Android API 30 无法在 Android 模拟器上检测到多点触控