Apache 在使用avro-maven插件生成代码时处理avro中的公共模式
我使用avro maven插件为avro.avsc模式文件生成java代码,我有一个公共模式,在多个地方作为单独的记录使用,当我在每个地方给出不同的名称空间时,它能够生成java代码,但生成的代码位于不同的文件夹中,尽管两个类的代码相同 有没有办法像上面的schenario那样只生成一个类作为公共引用。。。这是我的avscApache 在使用avro-maven插件生成代码时处理avro中的公共模式,apache,avro,avsc,Apache,Avro,Avsc,我使用avro maven插件为avro.avsc模式文件生成java代码,我有一个公共模式,在多个地方作为单独的记录使用,当我在每个地方给出不同的名称空间时,它能够生成java代码,但生成的代码位于不同的文件夹中,尽管两个类的代码相同 有没有办法像上面的schenario那样只生成一个类作为公共引用。。。这是我的avsc { "namespace": "exmaple.avro", "type": "record", "name": "TopRecord", "fields": [{
{
"namespace": "exmaple.avro",
"type": "record",
"name": "TopRecord",
"fields": [{
"name": "id",
"type": "string"
},
{
"name": "amount",
"type": "double"
},
{
"name": "AC",
"type": {
"type": "record",
"name": "AC_SCHEMA",
"fields": [{
"name": "id",
"type": "string"
},
{
"name": "amount",
"type": "double"
},
{
"name": "InnerCommon",
"type": {
"type": "record",
"name": "InnerSchema",
"fields": [{
"name": "id",
"type": "string"
}]
}
}
]
}
}, {
"name": "BC",
"type": {
"type": "record",
"name": "BC_SCHEMA",
"fields": [{
"name": "id",
"type": "string"
},
{
"name": "amount",
"type": "double"
},
{
"name": "InnerCommon",
"type": {
"type": "record",
"name": "InnerSchema",
"fields": [{
"name": "id",
"type": "string"
}]
}
}
]
}
}
]
}
如果我在两个位置为InnerCommon架构提供不同的名称空间,它可以生成代码,但在两个文件夹中的类具有相同的代码:(
下面是使用名称空间的avsc
{
"namespace": "exmaple.avro",
"type": "record",
"name": "TopRecord",
"fields": [{
"name": "id",
"type": "string"
},
{
"name": "amount",
"type": "double"
},
{
"name": "AC",
"type": {
"type": "record",
"name": "AC_SCHEMA",
"fields": [{
"name": "id",
"type": "string"
},
{
"name": "amount",
"type": "double"
},
{
"name": "InnerCommon",
"type": {
"type": "record",
"name": "InnerSchema",
"namespace": "inner1",
"fields": [{
"name": "id",
"type": "string"
}]
}
}
]
}
}, {
"name": "BC",
"type": {
"type": "record",
"name": "BC_SCHEMA",
"fields": [{
"name": "id",
"type": "string"
},
{
"name": "amount",
"type": "double"
},
{
"name": "InnerCommon",
"type": {
"type": "record",
"name": "InnerSchema",
"namespace": "inner2",
"fields": [{
"name": "id",
"type": "string"
}]
}
}
]
}
}
]
}
下面是生成的文件夹结构
有没有什么方法可以将所有常见的生成内容放在一个文件夹中,并使用相同的名称空间来消除重复
编辑1:
我需要将其注册到schema registry并检查其演变情况,我想知道是否有任何方法可以告诉插件不要覆盖生成的代码并只放置一个类您可以将common to定义移动到它们自己的avsc文件中,然后将avro maven插件的pom.xml规范中的common文件导入:
<plugins>
<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>${avro.schema.dir}</sourceDirectory>
<imports>
<import>${my.common.dir}/my_common_type_1.avsc</import>
<import>${my.common.dir}/my_common_type_2.avsc</import>
</imports>
</configuration>
</execution>
</executions>
</plugin>
org.apache.avro
avro-maven插件
${avro.version}
生成源
模式
${avro.schema.dir}
${my.common.dir}/my_common_type_1.avsc
${my.common.dir}/my_common_type_2.avsc
我需要将其注册到schema注册表并检查其演变情况,我想知道是否有任何方法可以告诉插件不要覆盖生成的代码,而只放置一个类