如何使用本地文件而不是来自 Github 的文件?



我正在使用Kafka Streams,我已经运行了这里找到的示例流,这工作正常。我想知道是否有办法替换以下命令,

./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo

使用本地文件而不是 Github 上的此源。我尝试从 Github 复制文件并将其放入本地文件中,streams如下所示:

./bin/kafka-run-class ./streams/WordCountDemo.java

但它给了我以下错误消息:

Error: Could not find or load main class ..streams.WordCountDemo.java

org.apache.kafka.streams.examples.wordcount 是包含类WordCountDemo的包的名称。将其放在另一个(本地)路径中不会更改包。

如果要使用 streams/WordcountDemo,则必须将包名称更改为 streams。

好的。@Pastafari和我在说同样的话。

  1. 将 github 的字数统计和所有相关的 jar/classes/etc 复制到本地目录。将它们放入源目录中并编译/运行它们。这是最重要的步骤 - 使用步骤 1-1B 让它们运行。

A. 将源的目标目录添加到类路径中。这是您的.class文件所在的位置。

B. 运行"./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo",它使用他们的wordCount类。

当一切都在运行时...

  1. 将 WordCount 复制到另一个目录(例如,source2)。对其进行更改。您的 WordCount 将位于 source2(目标目录)\org\apache\kafka\streams\examples\wordcount 目录中。您的字数统计将具有相同的包名称。现在有 2 个 WordCount.class 副本,但位于不同的目录中。
  2. 将类路径更改为"源 2;源" 这告诉类加载器首先查找 source2 目录。然后在源代码中搜索其余内容。
  3. 运行 "./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo" 您的类将首先加载。

你认为正在发生的事情:

Kafka 使用 HTTP 从 GitHub 获取文件WordCountDemo,并将其用作类。

这不是正在发生的事情。

实际发生的情况:

Kafka要求Java提供一个名为org.apache.kafka.streams.examples.wordcount.WordCountDemo的类。

与你这样做时得到的类完全相同:

import org.apache.kafka.streams.examples.wordcount.WordCountDemo;
...
WordCountDemo demo = new WordCountDemo(...);

在此命令行上,您没有import语句或类似语句,因此您使用完全限定的类名,其中包括包。

Java 在其类加载器中搜索文件系统右侧的WordCountDemo.class文件。 它很可能位于类路径某处的.jar文件中。

您可以通过编译它(并选择性地将其放入 JAR 中)来使自己的类可用。

这与正常的 Java 类加载没有什么不同 - 在任何介绍性的 Java 书籍或教程中阅读它。

相关内容

  • 没有找到相关文章

最新更新