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

How to use local file instead of one from Github?

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

./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 是包含 class WordCountDemo 的包的名称。将它放在另一个(本地)路径中不会更改包。

如果你想使用streams/WordcountDemo,你必须把包名改成streams。

好的。 @Pastafari 和我说的是同一件事。

  1. 将 github 的字数和所有相关的 jar/classes/etc 复制到您的本地目录。将它们放入源目录,然后 compile/run 它们。这是最重要的一步 - 使用步骤 1-1B 获取它们 运行ning。

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

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

当一切都运行宁...

  1. 将 WordCount 复制到另一个目录(例如,source2)。对其进行更改。您的 WordCount 将位于 source2(目标目录)\org\apache\kafka\streams\examples\wordcount 目录中。您的 WordCount 将具有相同的包名称。现在 WordCount.class 有 2 个副本,但在不同的目录中。
  2. 将 class 路径更改为 "source2;source" 这会告诉 classloader 首先在 source2 目录中查找。然后在source里搜索剩下的东西。
  3. 运行 "./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo" 您的 class 将首先加载。

你认为发生了什么:

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

事实并非如此。

实际发生了什么:

Kafka 正在向 Java 请求一个名为 org.apache.kafka.streams.examples.wordcount.WordCountDemo 的 class。

完全相同 class 你会得到:

import org.apache.kafka.streams.examples.wordcount.WordCountDemo;

...

WordCountDemo demo = new WordCountDemo(...);

在此命令行中,您没有 import 语句或类似语句,因此您使用完全限定的 class 名称,其中包括包。[=​​15=]

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

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

这与正常的 Java class 加载没有区别 -- 在任何介绍性 Java 书籍或教程中阅读它。