java.lang.NoClassDefFoundError: org / apache / kafka / клиенты / производитель / производитель - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь использовать Кафку:

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: орг / Apache / Kafka / клиентов / продюсер / продюсер

build.gradle:

...

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

...

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Я бегал:

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, поэтому мне пришлось включить свой jar в сам путь к классу в дополнение к Kafka.
  2. Я должен был указать основной класс, который хотел запустить.
  3. Из Кафки нужно было импортировать более одной банки, поэтому мне пришлось указать * insead of kafka-clients-2.2.0.jar.

Это решило проблему:

java -cp "D:\Software\kafka_2.12-2.2.0\libs\*;TestProejct-1.0-SNAPSHOT.jar" SimpleProducer
0 голосов
/ 30 мая 2019

Я пытался использовать следующую зависимость в Gradle.

compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.1.0'

Кроме того, ниже приведен фрагмент кода, для которого я тестировал.

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

Если вы хотите запустить с помощью команды, вы должны запустить, указав-classpath с набором файлов JAR.Ниже приведен пример.

java.exe -Dfile.encoding=UTF-8 -classpath somelocation/a.jar;somelocation/b.jar;somelocation/c.jar

Если это по-прежнему не решает вашу проблему, укажите структуру приложения, детали почтового индекса, чтобы другие могли помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...