avro - 架构失败:“孩子”不是定义的名称。"child" 字段的类型必须是定义的名称或 {"type": ...} 表达式
问题描述
我在 maven 项目中有 2 个 avro 模式 Parent.avsc 和 Child.avsc。我想从 avsc 文件生成 Java 类。我试图通过mvn clean install
但得到异常来构建项目。可以帮我找出问题所在吗?
家长
{
"type" : "record",
"name" : "Parent",
"namespace" : "com.namespace",
"fields" : [
{"name" : "child", "type" : "Child", "doc" : "Child doc" }
],
"doc" : "Parent doc"
}
孩子
{
"type" : "record",
"name" : "Child",
"namespace" : "com.namespace",
"fields" : [
{"name" : "child_id", "type" : "string", "doc" : "Id"},
{"name" : "child_name", "type" : ["string", "null"], "default": null, "doc" : "Name"}
],
"doc" : "Child"
}
Pom 插件
<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>
${project.basedir}/src/main/avro/
</sourceDirectory>
<includes>
<include>**/*.avsc</include>
</includes>
<imports>
<import>${project.basedir}/src/main/avro/Parent.avsc</import>
<import>${project.basedir}/src/main/avro/Child.avsc</import>
</imports>
<stringType>String</stringType>
</configuration>
</execution>
</executions>
</plugin>
解决方案
You need to import child object before its parent in pom.xml:
<imports>
<import>${project.basedir}/src/main/avro/Child.avsc</import>
<import>${project.basedir}/src/main/avro/Parent.avsc</import>
</imports>
推荐阅读
- spring - 无法在 grails 4.0.1 中配置 spring bean
- mysql - 如何在sql中查询重复记录?
- c - 将 zlib 流读入动态分配的缓冲区
- python - 在特定列中搜索熊猫数据框中的值
- kubernetes - 谁创建了命名空间?
- mathematical-optimization - 使用 CP Optimizer 时 CPLEX 内存不足
- css - 我们是否需要将 scss 编译为 css - React
- node.js - 页面未显示 - 无法获取/存储 EJS 问题
- octobercms - October CMS: Custom Plugin - 从组件中引用当前 RainLab.Blog 帖子
- spring - DropDown List 未在 Spring Boot Mysql 中填充数据