SBT没有生成Avro类

时间:2017-12-11 15:20:09

标签: scala sbt avro

我在sbt中创建了一个新项目,而且我很难生成avro文件。我在我的sbt插件中使用avrohugger

$ cat ~/.sbt/0.13/plugins/plugins.sbt
addSbtPlugin("org.ensime" % "sbt-ensime" % "2.0.1")
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.3")
addSbtPlugin("com.julianpeeters" % "sbt-avrohugger" % "1.1.0")

而且,正如avrohugger github页面上的建议,我在build.sbt中定义了avro任务的设置:

sourceGenerators in Compile += (avroScalaGenerate in Compile).taskValue

(avroSpecificSourceDirectory in Compile) := new java.io.File("src/main/resources/avro")

(avroScalaSpecificCustomNamespace in Compile) := Map("" -> "avro")

(avroSpecificScalaSource in Compile) := new java.io.File("target/generated-sources/avro")

我也试过使用avroScalaGenerateavroScalaGenerateScavro无济于事。我已尝试运行特定任务步骤(sbt avroScalaGenerateSpecific),该步骤成功但没有可见输出,即使使用show运行也是如此。 cleancompile在常规类的目标中生成预期输出,但不生成avro中的任何内容。总而言之,我没有留下任何错误消息,但没有结果。

1 个答案:

答案 0 :(得分:0)

经过一番挖掘,这是一些不同的问题。

首先,(avroSpecificSourceDirectory in Compile) := new java.io.File("src/main/resources/avro")不是完整的命名空间,这实际上有所不同。我使用my.cool.namespace因为我的文件夹不正确,并且其中包含.。重新构建文件夹结构以匹配预期的命名空间,并将其更改为斜杠,帮助它找到所需的文件。

我能够删除名称空间映射,因为我的avro定义不需要它,而且我不需要输出文件夹,因为默认值很好。

最后,我修复了在编译步骤中使用的生成器,并在整个生成文件中使用了特定的记录生成器。

现在,相关且已完成的build.sbt部分如下所示:

//add avro generation to the compile step
sourceGenerators in Compile += (avroScalaGenerateSpecific in Compile).taskValue

//tell the avro compiler where to look for avro sources.
(avroSpecificSourceDirectory in Compile) := new java.io.File("src/main/resources/my/cool/namespace/avro")

现在可以在需要时生成avro而不会出现任何错误。