首页 > 解决方案 > 架构失败:“孩子”不是定义的名称。"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>

标签: avro

解决方案


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>

推荐阅读