如何使用本地文件而不是 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 和我说的是同一件事。
- 将 github 的字数和所有相关的 jar/classes/etc 复制到您的本地目录。将它们放入源目录,然后 compile/run 它们。这是最重要的一步 - 使用步骤 1-1B 获取它们 运行ning。
一个。将源的目标目录添加到您的 class 路径。这是您的 .class 文件所在的位置。
乙。 运行 "./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo" 使用他们的 wordCount class.
当一切都运行宁...
- 将 WordCount 复制到另一个目录(例如,source2)。对其进行更改。您的 WordCount 将位于 source2(目标目录)\org\apache\kafka\streams\examples\wordcount 目录中。您的 WordCount 将具有相同的包名称。现在 WordCount.class 有 2 个副本,但在不同的目录中。
- 将 class 路径更改为 "source2;source" 这会告诉 classloader 首先在 source2 目录中查找。然后在source里搜索剩下的东西。
- 运行 "./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 书籍或教程中阅读它。
我正在使用 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 和我说的是同一件事。
- 将 github 的字数和所有相关的 jar/classes/etc 复制到您的本地目录。将它们放入源目录,然后 compile/run 它们。这是最重要的一步 - 使用步骤 1-1B 获取它们 运行ning。
一个。将源的目标目录添加到您的 class 路径。这是您的 .class 文件所在的位置。
乙。 运行 "./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo" 使用他们的 wordCount class.
当一切都运行宁...
- 将 WordCount 复制到另一个目录(例如,source2)。对其进行更改。您的 WordCount 将位于 source2(目标目录)\org\apache\kafka\streams\examples\wordcount 目录中。您的 WordCount 将具有相同的包名称。现在 WordCount.class 有 2 个副本,但在不同的目录中。
- 将 class 路径更改为 "source2;source" 这会告诉 classloader 首先在 source2 目录中查找。然后在source里搜索剩下的东西。
- 运行 "./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 书籍或教程中阅读它。