如何修复kafka生产者示例的noclassdeffounderror?

2admgd59  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(430)

当我试图编译和运行kafka附带的producer示例时,我遇到了noclassdeffounderror。我想知道如何解决下面讨论的错误?
注意:我是一名c++/c程序员,精通linux,并开始学习java。我可以按照指示去做,但我很可能会要求一些澄清。
我有一个来自hortonworks的vm沙盒,它运行一个red-hat设备。在它上面,我有一个工作Kafka服务器,通过遵循本教程,我能够得到所需的生产者张贴消息到服务器。
现在我想开始写我自己的代码,但首先我决定确保我可以编译的例子文件,Kafka来后,一天的试验和错误,我似乎无法得到这个去。
以下是我正在做的:
我将转到示例文件所在的目录并键入:
javac-cp$kcore:$kclient:客户端:$score:. ./*.java
$kcore:$kclient:$score分别解析kafka核心、kafka客户端和scala库的jar。一切返回正常,没有错误,并将所有类文件放在当前目录中;然而,当我跟进
javac-cp$kcore:$kclient:客户端:$score:. 制作人
我得到一个noclassdeffounderror告诉我

类的代码是

package kafka.examples;

import java.util.Properties;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;

public class Producer extends Thread
{
  private final kafka.javaapi.producer.Producer<Integer, String> producer;
  private final String topic;
  private final Properties props = new Properties();

  public Producer(String topic)
  {
    props.put("serializer.class", "kafka.serializer.StringEncoder");
    props.put("metadata.broker.list", "localhost:9092");
    // Use random partitioner. Don't need the key type. Just set it to Integer.
    // The message is of type String.
    producer = new kafka.javaapi.producer.Producer<Integer, String>(new ProducerConfig(props));
    this.topic = topic;
  }

  public void run() {
    int messageNo = 1;
    while(true)
    {
      String messageStr = new String("Message_" + messageNo);
      producer.send(new KeyedMessage<Integer, String>(topic, messageStr));
      messageNo++;
    }
  }

}

有人能给我指出解决这个错误的正确方向吗?出于某种原因,这些类需要放在不同的目录中吗?

s8vozzvw

s8vozzvw1#

包名称是您需要在命令行上提供的类名的一部分:

javac -cp $KCORE:$KCLIENT:$SCORE:. kafka.examples.Producer

此外,您应该站在类层次结构的根目录中,该目录似乎有两个以上的目录(您当前站在 kafka/examples . 或者,您可以使用 ../.. 而不是 .-cp 参数来表示根目录是向上的两个目录。
您可能希望熟悉使用intellijidea或eclipse之类的ide(以及如何在这些ide中使用库),因为这将使开发变得更加容易。不过,首先要强调的是,你会更好地理解事物是如何缝合在一起的(ide基本上会在你没有注意到的情况下为你描绘出所有这些控制台命令)。

相关问题