2017-12-11 3 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 정의에 필요하지 않았기 때문에 네임 스페이스 매핑을 제거 할 수 있었고 기본값이 좋기 때문에 출력 폴더가 필요하지 않았습니다.

마지막으로 컴파일 단계에서 어떤 생성기가 사용되고 있는지를 수정하고 빌드 파일 전체에서 특정 레코드 생성기를 사용했습니다. 오류없이 필요할 때이 지금 브로 생성

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

:

은 그래서 지금, 관련 및 build.sbt 부분은 다음과 같습니다 완료.

관련 문제