无法从 avro 架构文件生成源代码

1 maven avro

我知道这个话题在其他地方的这个网站上已经被问过好几次了。我已经进行了尽职调查,以确保已经尝试过以前类似问题的解决方案。但我仍然无法让它工作。我遇到的问题是:我无法在 Eclipse 中使用 maven 从 avro 模式生成源代码(安装了 M2E 的霓虹灯版本)。当我尝试“mvn clean generate-sources”或“mvn clean compile”时,mvn结果成功,但目标目录中没有生成源代码。

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-avro10 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maven-avro10 ---
[INFO] Deleting C:\EclipseWS_forOlderProjects\maven-avro10\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.101 s
[INFO] Finished at: 2018-02-18T20:25:46-05:00
[INFO] Final Memory: 8M/241M
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

这是我的 pom.xml 文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>Maven-Avro</groupId>
  <artifactId>maven-avro10</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>maven-avro10</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <project.basedir>C:\EclipseWS_forOlderProjects\maven-avro10</project.basedir>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.avro</groupId>
      <artifactId>avro</artifactId>
      <version>1.8.2</version>
    </dependency>

    <dependency>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro-tools</artifactId>
    <version>1.8.2</version>
</dependency>

       <dependency>
        <groupId>org.apache.avro</groupId>
        <artifactId>avro-compiler</artifactId>  
        <version>1.8.2</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.25</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
  <pluginManagement>
  <plugins>
  <plugin>

  <groupId>org.apache.avro</groupId>
  <artifactId>avro-maven-plugin</artifactId>
  <version>1.8.2</version>
  <executions>
    <execution>
      <phase>generate-sources</phase>
      <goals>
        <goal>schema</goal>
      </goals>
       <configuration>
        <sourceDirectory>${project.basedir}\src\main\avro\</sourceDirectory>
        <outputDirectory>${project.basedir}\src\main\java\</outputDirectory>
      </configuration>

    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.7.0</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
  </configuration>
</plugin>

</plugins>
</pluginManagement>
</build>

</project>
Run Code Online (Sandbox Code Playgroud)

我尝试使用我自己的 avro 模式定义以及来自 Apache Avro 入门站点的那些。例如我将两个 avsc 文件放在 ${project.basedir}\src\main\avro\ user.avsc 文件中

{"namespace": "Maven_Avro.maven_avro10",
 "type": "record",
 "name": "User",
 "fields": [
     {"name": "name", "type": "string"},
     {"name": "favorite_number",  "type": ["int", "null"]},
     {"name": "favorite_color", "type": ["string", "null"]}
 ]
}
Run Code Online (Sandbox Code Playgroud)

和 user1.avsc

{"namespace": "example.avro",
 "type": "record",
 "name": "User1",
 "fields": [
     {"name": "name", "type": "string"},
     {"name": "favorite_number",  "type": ["int", "null"]},
     {"name": "favorite_color", "type": ["string", "null"]}
 ]
}
Run Code Online (Sandbox Code Playgroud)

作为我在提到命名空间之前阅读的帖子之一,他无法生成源代码,不幸的是,该帖子没有解释命名空间如何导致问题以及如何更改架构中的命名空间解决问题。我已经尝试通过“maven-> 更新项目...”更新 Eclipse 项目,我也尝试使用“mvn generate-sources”或“mvn clean generate-sources”在 Eclipse 之外手动构建它,命令行构建就是全部成功,但在目标目录或任何其他文件夹中没有生成源代码。

请让我知道我错过了什么或做错了什么,所以我的 Eclipse(或命令行)mvn build 不会生成 avro schema java 源代码。提前致谢。

Aru*_*run 6

您已在不正确的元素下配置了插件<pluginManagement></pluginManagement>,请删除此元素并让您的插件在<plugins>元素下。