在Java,Maven中导入路径

时间:2018-03-16 15:25:36

标签: java maven

按照位于https://github.com/confluentinc/kafka-streams-examples/blob/4.0.0-post/src/main/java/io/confluent/examples/streams/WikipediaFeedAvroExample.java

的Kafka Streams教程进行操作

有一句话:

-webkit-

我认为它与此文件有关:https://github.com/confluentinc/kafka-streams-examples/blob/4.0.0-post/src/main/resources/avro/io/confluent/examples/streams/wikifeed.avsc

  • Maven如何知道它位于import io.confluent.examples.streams.avro.WikiFeed 而不是resource文件夹?
  • 为什么 io / confluent / examples / streams / avro /wikifeed.avsc 而不是 avro /io/confluent/examples/streams/wikifeed.avsc

另一个导入更加精彩:

java
  • import io.confluent.kafka.serializers.AbstractKafkaAvroSerDeConfig; 文件夹中没有kafka个文件夹。

https://github.com/confluentinc/kafka-streams-examples/tree/4.0.0-post/src/main/resources/avro/io/confluent

所有这些魔法如何起作用?

2 个答案:

答案 0 :(得分:2)

魔法avro-maven-plugin制作,您可以在pom.xml中找到:

<plugin>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro-maven-plugin</artifactId>
    <version>${avro.version}</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>schema</goal>
            </goals>
            <configuration>
                <sourceDirectory>src/main/resources/avro/io/confluent/examples/streams</sourceDirectory>
                <outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
                <stringType>String</stringType>
            </configuration>
        </execution>
    </executions>
</plugin>

引用插件文档:

  

与动态语言的简单集成。不需要代码生成来读取或写入数据文件,也不需要使用或实现RPC协议。代码生成作为可选的优化,仅值得为静态类型语言实现。

这是在预编译时,插件读取 avsc 文件的内容并生成二进制源(对于这种情况,Java类),然后可以在代码中使用。

您可以在target/generated-sources中看到插件生成的代码。那里将有一个文件夹结构和适当的java(非类)文件。

答案 1 :(得分:1)

WikiFeed类是在构建时使用您链接到的.avsc文件中的avro-maven-plugin动态创建的。您可以查看其配置方式in the <plugins> section of pom.xml

AbstractKafkaAvroSerDeConfig类来自kafka-avro-serializer依赖项。 Eclipse有一种很好的方法可以从编辑器视图中的单个类导航回包含Maven依赖项的Package Explorer,如下所示:

package explorer: maven dependencies