我在 quarkus 项目中使用 avro-maven-plugin:
<plugin>
<groupId>org.apache.avro</groupId>
<artifactId>avro-maven-plugin</artifactId>
<version>1.11.3</version>
<configuration>
...
</configuration>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>schema</goal>
</goals>
<configuration>
<includes>
<include>**/*.avsc</include>
</includes>
<imports>
<import>A.avsc</import>
<import>B.avsc</import>
</imports>
</configuration>
</execution>
</executions>
</plugin>
问题是关于插件中的导入部分。 文档说导入的文件不应互相引用,但在我的情况下,文件 A 和 B 都需要导入,并且 B 引用 A。
据我了解,这是不可能的并且失败:
[错误] 无法在项目上执行目标 io.quarkus.platform:quarkus-maven-plugin:3.6.6:dev (default-cli) :无法执行 mojo:目标 org.apache.avro:avro- 的执行为 null maven-plugin:1.11.3:架构失败:无法重新定义:-> [帮助 1]
有什么解决办法吗?
看起来问题出在 quarkus maven 插件上。 当作为 quarkus:dev 的一部分运行此 Maven 任务时,构建失败, 但仅使用 Maven 运行它就可以了。
检查您是否使用
quarkus-maven-plugin
来实现 generate-code
目标。在这种情况下,使用 Maven 编译进行构建将起作用(正如您所描述的),因为只会使用您定义的插件和配置。将 quarkus:dev
与上述 generate-code
目标一起使用也将开始编译 Avro 文件,但没有导入配置,因为使用了另一个插件。
由于您使用的是 Quarkus,我建议使用他们的 Avro 模式生成方式。在这种情况下,您需要在 Quarkus 配置文件中的
avro.codegen.avsc.imports
下列出导入。更多信息在
有关调整 avro 代码生成的 Quarkus 文档 ;)