【问题标题】:unable to generate source code from avro schema files无法从 avro 模式文件生成源代码
【发布时间】:2018-02-19 02:22:05
【问题描述】:

我知道这个话题已经在其他地方的这个网站上被问过好几次了。我已经进行了尽职调查,以确保已经尝试过之前类似问题的解决方案。但我仍然无法让它工作。我遇到的问题是:我无法在 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] ------------------------------------------------------------------------

这是我的 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>

我尝试使用我自己的 avro 架构定义以及来自 Apache Avro 入门网站的架构定义。例如我将两个 avsc 文件放在 ${project.basedir}\src\main\avro\ 用户.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"]}
 ]
}

和 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"]}
 ]
}

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

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

【问题讨论】:

  • 有关此问题/问题的更多信息。我在Eclipse new->maven project...下创建了maven项目...
  • 我也可以使用以下方式在我指定的任何目标目录中生成源代码。
  • C:\EclipseWS_forOlderProjects\maven-avro10\src\main\avro>java -jar C:\Users\hteast100\.m2\repository\org\apache\avro\avro-tools\ 1.8。 2\avro-tools-1.8.2.jar 编译架构 user.avsc .
  • 我看到源代码是这样生成的。不知道为什么 Elcipse generate-source 插件不起作用,想知道它是否与类路径有关。我检查了项目构建路径,发现 avro-tools-1.8.2.jar 在库 Maven 依赖项中。我什至尝试通过项目->Maven->为 avro-tool 依赖项添加依赖项重新添加 Maven 依赖项。但是 Eclipse 中的 generate-source 不起作用。
  • 看看maven Avro插件。您的命令行代码正在从 Avro 工具调用编译器。 Maven 仍在调用 java 编译器。

标签: maven avro


【解决方案1】:

您在不正确的元素 &lt;pluginManagement&gt;&lt;/pluginManagement&gt; 下配置了插件,请删除此元素并让您的插件在 &lt;plugins&gt; 元素下。

【讨论】:

  • 我在 Eclipse IDE 上遇到了类似的问题,通过删除 解决了这个问题。您能否解释一下为什么 pluginManagement 会导致这里出现问题。谢谢
  • 标签用于管理子模块中的插件。
猜你喜欢
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 2014-08-24
  • 2021-10-27
  • 2019-07-19
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
相关资源
最近更新 更多