2014-10-28 210 views
0

我正在試圖使用Scala宏註釋庫和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'會發生什麼? – 2014-10-28 13:48:16

+0

同樣的問題:'''java.io.FileNotFoundException:avsc/FriendRequestAcceptedGson.avsc(沒有這樣的文件或目錄)''' – Lee 2014-10-28 13:52:01

回答

1

資源被編譯到您的JAR文件中。您必須使用ClassLoader找到它們,而不是在文件系統中。 java.io.FIle類只知道如何查看文件系統。現在,如果您嘗試打開源文件(在部署JAR時可能不存在),它將取決於您當前的工作目錄與文件的相對位置。可能它是根源,所以你需要使用的路徑是完整的相對路徑:src/main/resources/avsc/FriendRequestAcceptedGson.avsc