2017-12-11 5 views
0

私はsbtで新しいプロジェクトを作成していますが、私はavroファイルを生成するのに苦労しています。SBTがAvroクラスを生成しない

$ 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にアブロタスクの設定を定義しています:私は私のsbtプラグインでavrohuggerを使用してい

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のものは出力しません。だから一緒に、私はエラーメッセージが残っているが、結果は残っていない。

答えて

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

これは今アブロ生成します。

関連する問題