Avro maven 插件无法重新定义类型

问题描述 投票:0回答:2

我在 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]

有什么解决办法吗?

maven quarkus avro
2个回答
0
投票

看起来问题出在 quarkus maven 插件上。 当作为 quarkus:dev 的一部分运行此 Maven 任务时,构建失败, 但仅使用 Maven 运行它就可以了。


0
投票

检查您是否使用

quarkus-maven-plugin
来实现
generate-code
目标。在这种情况下,使用 Maven 编译进行构建将起作用(正如您所描述的),因为只会使用您定义的插件和配置。将
quarkus:dev
与上述
generate-code
目标一起使用也将开始编译 Avro 文件,但没有导入配置,因为使用了另一个插件。

由于您使用的是 Quarkus,我建议使用他们的 Avro 模式生成方式。在这种情况下,您需要在 Quarkus 配置文件中的

avro.codegen.avsc.imports
下列出导入。更多信息在 有关调整 avro 代码生成的 Quarkus 文档 ;)

© www.soinside.com 2019 - 2024. All rights reserved.