2014-10-28 5 views
0

this 라이브러리와 함께 스칼라 매크로 주석을 사용하려고합니다.리소스에 대한 경로를 가져올 수 없습니다.

나는 다음과 같이 내 코드에서 참조하려고 src/main/resources/avsc/FriendRequestAcceptedGson.avsc

에서 스키마 파일이 있습니다

@AvroTypeProvider("/avsc/FriendRequestAcceptedGson.avsc") 
@AvroRecord 
case class FriendRequestAcceptedGson() 

입니다 오류가 나는 얻을 :

[error] /home/lee/Code/bigdata-friends/java/etl/src/main/scala/com/mxit/bd/friends/etl/Runner.scala:64: exception during macro expansion: [error] java.io.FileNotFoundException: /avsc/FriendRequestAcceptedGson.avsc (No such file or directory) [error] at java.io.FileInputStream.open(Native Method) [error] at java.io.FileInputStream.<init>(FileInputStream.java:146) [error] at org.codehaus.jackson.JsonFactory.createJsonParser(JsonFactory.java:504) [error] at org.apache.avro.Schema$Parser.parse(Schema.java:922) [error] at com.julianpeeters.avro.annotations.util.SchemaParser$.getSchema(SchemaParser.scala:20) [error] at com.julianpeeters.avro.annotations.AvroTypeProviderMacro$.impl(TypeProviderMacro.scala:23) [error] @AvroTypeProvider("/avsc/FriendRequestAcceptedGson.avsc")

+0

avsc 파일이 절대 경로에서 선택되고있는 것 같습니다. 'avsc/FriendRequestAcceptedGson.avsc'를 사용하면 어떻게됩니까? –

+0

같은 문제 :'''java.io.FileNotFoundException : avsc/FriendRequestAcceptedGson.avsc (파일이나 디렉토리가 없음)''' – Lee

답변

1

리소스가 JAR 파일로 컴파일됩니다. 파일 시스템이 아닌 ClassLoader를 사용해야합니다. java.io.FIle 클래스는 파일 시스템을 보는 방법 만 알고있다. 이제 JAR이 배포 될 때 존재하지 않을 수도있는 소스 파일을 열려고하면 현재 작업 디렉토리가 파일과 관련된 위치에 따라 달라집니다. 아마도 루트에 있으므로 사용하고자하는 경로는 완전한 상대 경로 일 것입니다 : src/main/resources/avsc/FriendRequestAcceptedGson.avsc

관련 문제