我正在尝试运行与 Apache Kafka 集成的 Java 应用程序。代码在 IntelliJ IDEA 中成功编译并运行,但是当我尝试运行编译的 JAR 文件时,出现以下错误:
线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/kafka/clients/consumer/KafkaConsumer 在 com.blockonic.balances.ChronicleMapWebSocketServer.main(ChronicleMapWebSocketServer.java:112) 引起:java.lang.ClassNotFoundException:org.apache.kafka.clients.consumer.KafkaConsumer 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527) 这是我的java代码:
// ChronicleMapWebSocketServer.java (simplified for brevity)
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.serialization.*;
public class ChronicleMapWebSocketServer {
public static void main(String[] args) throws Exception {
// Configure consumer properties
Properties config = new Properties();
config.put(ConsumerConfig.GROUP_ID_CONFIG, "java-group-1");
// ... other config properties
// Create a new Kafka consumer instance
String topic = "user-balances";
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(config);
consumer.subscribe(Arrays.asList(topic));
// ... rest of the code
}
}
这是我的 build.gradle
plugins {
id 'application'
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'net.openhft:chronicle-map:3.24ea1'
implementation files('build/libs/kafka-clients-3.3.1.jar')
}
jar {
manifest {
attributes(
'Main-Class': 'com.blockonic.balances.ChronicleMapWebSocketServer',
'Class-Path': 'libs/kafka-clients-3.3.1.jar'
)
}
}
我尝试将 Apache Kafka 客户端 JAR (kafka-clients-3.3.1.jar) 添加到 build/libs 目录,并在 build.gradle 文件的依赖项块中指定它。我还将它添加到 JAR 清单中的 Class-Path 属性中。
但是,当我运行编译后的 JAR 文件时,我仍然收到与 KafkaConsumer 类相关的 NoClassDefFoundError。
有人可以帮我理解我做错了什么以及如何解决这个问题吗?
根据JavaDoc检查,org.apache.kafka.clients.consumer 包中没有名为“Properties”的类。那么你是在什么基础上创建这个对象的,你能澄清一下吗?
谢谢。