在特定包中生成 AVRO 类

Generating AVRO classes in specific package

我有两个具有匹配命名空间和字段名称的 .avsc 文件。生成时,从第一个模式生成的 类 被第二个模式的 类 覆盖。有没有办法在特定目录中生成 类,但仅针对其中一个 .avsc 文件?

如果我更改 avro 模式中的名称空间,一切都很好,但 Kafka 消息未被读取,我收到以下错误:

Could not find class com.package.TestClaim

很明显,因为avro改后的命名空间是com.package.test_claim.TestClaim

这是我将 *.test_claim 添加到其中一个模式的命名空间时生成的内容。

in a specific directory, but only for one of the .avsc files?

这就是命名空间的作用。这在其他地方不可覆盖,所以是的,如果单独编译,两个文件会发生冲突。

不清楚您是如何编译 Java 类,但是如果您使用 Avro IDL 而不是 AVSC,您可以 declare/combine 单个命名空间下的许多记录类型protocol(这会将 类 写入单个文件夹)

如果您需要 different/nested 包装,我们也可以提供

@namespace("org.apache.avro.firstNamespace")
protocol MyProto {
  @namespace("org.apache.avro.someOtherNamespace")
  record Foo {}