首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.lang.NoClassDefFoundError: org/apache/kafka/客户端/生产者/生产者

java.lang.NoClassDefFoundError: org/apache/kafka/客户端/生产者/生产者
EN

Stack Overflow用户
提问于 2019-05-31 03:18:32
回答 2查看 7.3K关注 0票数 2

我正在尝试使用Kafka:

代码语言:javascript
复制
import java.util.Properties;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;

public class SimpleProducer {
    public static void main(String[] args) {
        Properties props = new Properties();
        Producer<String, String> producer = new KafkaProducer<String, String>(props);
    }
}

但得到以下错误:

java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Producer

build.gradle:

代码语言:javascript
复制
...

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.2.0'
}

...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-08 00:49:44

我跑了一下:

代码语言:javascript
复制
java -jar TestProejct-1.0-SNAPSHOT.jar -cp "D:\Software\kafka_2.12-2.2.0\libs\kafka-clients-2.2.0.jar"

有几个问题:

  1. java不能同时接受-jar和-cp,所以除了Kafka之外,我还必须在类路径中包含我的jar。
  2. 我必须指定我想要运行的主类。
  3. 有多个jar要从Kafka导入,所以我必须指定* insead of java

这就解决了这个问题:

代码语言:javascript
复制
java -cp "D:\Software\kafka_2.12-2.2.0\libs\*;TestProejct-1.0-SNAPSHOT.jar" SimpleProducer
票数 1
EN

Stack Overflow用户

发布于 2019-05-31 03:21:19

我在gradle中尝试了以下依赖项。

代码语言:javascript
复制
compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.1.0'

代码语言:javascript
复制
import java.util.Properties;
import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;

public class Producer {

    public static void main(String[] args){
        Properties properties = new Properties();
        properties.put("bootstrap.servers", "192.168.119.139:9092");
        properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        KafkaProducer kafkaProducer = new KafkaProducer(properties);
        TestCallback callback = new TestCallback();
        try{
            for(int i = 0; i < 100; i++){
                System.out.println("----->"+i);
                kafkaProducer.send(new ProducerRecord("test", Integer.toString(i), "test message - " + i ));
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            kafkaProducer.close();
        }
    }


    private static class TestCallback implements Callback {
        @Override
        public void onCompletion(RecordMetadata recordMetadata, Exception e) {
            if (e != null) {
                System.out.println("Error while producing message to topic :" + recordMetadata);
                e.printStackTrace();
            } else {
                String message = String.format("sent message to topic:%s partition:%s  offset:%s", recordMetadata.topic(), recordMetadata.partition(), recordMetadata.offset());
                System.out.println(message);
            }
        }
    }
}

我已经使用Eclipse IDE测试了这段代码。还要记住,apache kafka客户端还会下载以下依赖项。

  • zstd-jni-1.3.5-4.jar
  • lz4-java-1.5.0.jar
  • snappy-java-1.1.7.2.jar
  • slf4j-api-1.7.25.jar

如果您希望使用命令运行,则必须使用一组jar文件指定-classpath来运行。下面我提供一个例子。

代码语言:javascript
复制
java.exe -Dfile.encoding=UTF-8 -classpath somelocation/a.jar;somelocation/b.jar;somelocation/c.jar

如果它仍然不能解决您的问题,请提供应用程序结构,发布代码详细信息,以便其他人可以帮助您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56384388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档