使用Maven无法从avsc文件生成对应类的问题求助
解决方案
你只添加了Avro相关的基础依赖,没有配置avro-maven-plugin插件,Maven默认不会自动执行avsc到Java类的编译逻辑,这是绝大多数同类问题的根因。
步骤1:添加avro-maven-plugin配置
在pom.xml的<build><plugins>节点下添加如下配置,插件版本需和你引入的Avro依赖版本保持一致:
<plugin> <groupId>org.apache.avro</groupId> <artifactId>avro-maven-plugin</artifactId> <version>1.10.2</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>schema</goal> </goals> <configuration> <!-- 替换为你实际存放avsc文件的目录路径 --> <sourceDirectory>${project.basedir}/src/main/avro</sourceDirectory> <!-- 生成类的输出路径,默认即可,也可以自定义 --> <outputDirectory>${project.build.directory}/generated-sources/avro</outputDirectory> <!-- 可选配置:生成的类是否添加setter方法 --> <createSetters>true</createSetters> </configuration> </execution> </executions> </plugin>
步骤2:校验路径配置
- 确认
sourceDirectory配置的路径和你实际存放.avsc文件的路径完全匹配,注意大小写、文件夹拼写是否正确 - 确认所有schema文件的后缀为
.avsc,没有隐藏的.txt后缀
步骤3:执行生成命令
配置完成后可以单独执行生成目标验证效果,不需要全量打包:
mvn avro:schema
如果执行成功,就能在配置的outputDirectory路径下看到生成的Customer和Currency两个类。如果执行报错,可以根据控制台的错误提示排查schema语法、文件权限等其他问题。
补充说明
- 依赖版本和插件版本必须保持一致,否则可能出现兼容性问题导致生成失败
- 生成完成后如果IDE无法识别生成的类,可以手动将
target/generated-sources/avro目录标记为「Generated Sources Root」
内容的提问来源于stack exchange,提问作者Paweł Bocian
相关产品推荐
相关产品推荐

