Следуя руководству по Kafka Streams, расположенному по адресу: https://github.com/confluentinc/kafka-streams-examples/blob/4.0.0-post/src/main/java/io/confluent/examples/streams/WikipediaFeedAvroExample.java
Есть строчка:
import io.confluent.examples.streams.avro.WikiFeed
Как я полагаю, это относится к этому файлу: https://github.com/confluentinc/kafka-streams-examples/blob/4.0.0-post/src/main/resources/avro/io/confluent/examples/streams/wikifeed.avsc
resource, а не в папке java?Другой импорт еще более фантастичен:
import io.confluent.kafka.serializers.AbstractKafkaAvroSerDeConfig;
kafka нет папки java/io/confluent.Как все это волшебство должно работать?




Класс WikiFeed создается динамически во время сборки с использованием avro-maven-plugin из файла .avsc, с которым вы связались. Вы можете проверить, как он настроен в разделе <plugins> файла pom.xml.
Класс AbstractKafkaAvroSerDeConfig происходит от зависимости kafka-avro-serializer. В Eclipse есть удобный способ перехода от отдельного класса в представлении редактора обратно к проводнику пакетов, который включает зависимости Maven, например:
магия создается плагин avro-maven, который вы можете найти в 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>
Цитата из документации плагина:
Simple integration with dynamic languages. Code generation is not required to read or write data files nor to use or implement RPC protocols. Code generation as an optional optimization, only worth implementing for statically typed languages.
Во время предварительной компиляции плагин считывает содержимое файлов avsc и генерирует двоичные источники (в данном случае классы Java), которые затем можно использовать в коде.
Вы можете увидеть код, сгенерированный плагином, в target/generated-sources. Там будет структура папок и правильные файлы java (не класса).
@IanMcLaird в этом случае maven ничего не загружает ...