我希望这对其他人有所帮助,如果我在这里写它,我已经为这种情况创建了maven插件 - https://github.com/tunguski/interfacer。
它遍历自动生成的类,并检查它们是否符合特定包中类路径上的接口。如果是,则将接口添加到类中。它适用于通用接口,至少在我必须处理的基本示例中是这样。
该插件不是特定于avro的,可用作生成的代码后处理器,因此它也可以在其他情况下使用。
<!--
post process avro generated sources and add interfaces from package
pl.matsuo.interfacer.showcase to every generated class that has
all methods from specific interface
-->
<plugin>
<groupId>pl.matsuo.interfacer</groupId>
<artifactId>interfacer-maven-plugin</artifactId>
<version>0.0.6</version>
<executions>
<execution>
<configuration>
<interfacesDirectory>${project.basedir}/src/main/java</interfacesDirectory>
<interfacePackage>pl.matsuo.interfacer.showcase</interfacePackage>
</configuration>
<goals>
<goal>add-interfaces</goal>
</goals>
</execution>
</executions>
</plugin>
// src/main/java manually defined interface
public interface HasName {
String getName();
}
// target/generated-sources/avro
public class Person {
String name;
public String getName() {
return name;
}
// [...]
}
public class Company {
String name;
public String getName() {
return name;
}
// [...]
}
// after this plugin run
// target/generated-sources/avro
public class Person implements HasName {
String name;
public String getName() {
return name;
}
// [...]
}
public class Company implements HasName {
String name;
public String getName() {
return name;
}
// [...]
}