Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用来自不同包的Avro模式_Java_Maven_Avro - Fatal编程技术网

Java 使用来自不同包的Avro模式

Java 使用来自不同包的Avro模式,java,maven,avro,Java,Maven,Avro,我们在一个大型Java项目中使用Avro作为序列化引擎 我们使用maven插件从Avro模式自动生成类(我们只使用avsc,不使用IDL)。 所有的工作都很好,直到我们来交叉包参考 插件可以选择使用import标记导入模式文件,这在包内可以正常工作,但是当我们尝试引用包外的模式时,它不会正常工作 这是插件设置: <build> <plugins> <plugin> <groupId>org.apache.avro</groupId

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

我们使用maven插件从Avro模式自动生成类(我们只使用avsc,不使用IDL)。 所有的工作都很好,直到我们来交叉包参考

插件可以选择使用import标记导入模式文件,这在包内可以正常工作,但是当我们尝试引用包外的模式时,它不会正常工作

这是插件设置:

<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>

org.apache.avro
avro-maven插件
1.7.7
一串
生成源
模式
${project.basedir}/src/main/resources/
${project.basedir}/src/main/java/
私有的
${project.parent.basedir}/SomeOtherPackagePath/schema1.avsc
${project.basedir}/src/main/resources/schema2.avsc
schema2.avsc包含一个名为schema2的记录,并且已正确导入,引用schema2的所有其他架构都有效

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

[错误]无法在上执行目标org.apache.avro:avro maven插件:1.7.7:schema(默认值) 项目匹配通用:目标org.apache.avro:avro maven插件的执行默认值:1.7.7:schema失败:“Schema1”不是定义的名称。“schema1”字段的类型必须是定义的名称或{“type”:…}表达式

我们错过什么了吗


是否有任何方法可以使用其他包中的架构?

请在源目录中添加SomeOtherPackagePath,如下所示:

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

${project.basedir}/src/main/resources/
${project.parent.basedir}/SomeOtherPackagePath/