【问题标题】:Using Avro schema from different package使用来自不同包的 Avro 模式
【发布时间】:2015-02-28 00:39:00
【问题描述】:

我们在一个大型 Java 项目中使用 Avro 作为序列化引擎。

我们使用 maven 插件从 Avro 模式自动生成类(我们只使用 avsc,没有 IDL)。 在我们进行跨包引用之前,一切都很好。

插件可以选择使用 import 标签来导入 schema 文件,这在包内可以正常工作,但是当我们尝试在包外引用 schema 时就不行了。

这是插件设置:

<build>
<plugins>
  <plugin>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro-maven-plugin</artifactId>
    <version>1.7.7</version>
    <configuration>
      <stringType>String</stringType>
    </configuration>
      <executions>
        <execution>
          <phase>generate-sources</phase>
          <goals>
            <goal>schema</goal>
          </goals>
          <configuration>
            <sourceDirectory>${project.basedir}/src/main/resources/</sourceDirectory>
            <outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
            <fieldVisibility>PRIVATE</fieldVisibility>
              <imports>
                <import>${project.parent.basedir}/SomeOtherPackagePath/schema1.avsc</import>
                <import>${project.basedir}/src/main/resources/schema2.avsc</import>
              </imports>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
</build>

schema2.avsc 包含一条名为 schema2 的记录,并且导入正确,所有其他引用 schema2 的架构都有效。

schema1.avsc 包含一个名为 schema1 的记录,并且位于另一个包中,因此在构建 maven 时,此包中引用它的模式会失败:

[错误] 无法执行目标 org.apache.avro:avro-maven-plugin:1.7.7:schema (default) on 项目匹配常见:目标 org.apache.avro:avro-maven-plugin:1.7.7:schema 的执行默认值失败:“Schema1”不是定义的名称。 "schema1" 字段的类型必须是定义的名称或 {"type": ...} 表达式。

我们错过了什么吗?

有没有办法使用其他包中的模式?

【问题讨论】:

    标签: java maven avro


    【解决方案1】:

    请在 sourceDirectories 中添加 SomeOtherPackagePath,如下所示:

    <sourceDirectories>
     <sourceDirectory>${project.basedir}/src/main/resources/</sourceDirectory>
     <sourceDirectory>${project.parent.basedir}/SomeOtherPackagePath/</sourceDirectory>
    </sourceDirectories>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2020-09-09
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      相关资源
      最近更新 更多