无法获得资源的路径

时间:2014-10-28 13:28:07

标签: scala

我正在尝试使用带有this库的Scala宏注释。

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

1 个答案:

答案 0 :(得分:1)

资源被编译到您的JAR文件中。您必须使用ClassLoader找到它们,而不是在文件系统中。 java.io.FIle类只知道如何查看文件系统。现在,如果您尝试打开源文件(在部署JAR时可能不存在),则将取决于当前工作目录相对于文件的位置。可能它位于根部,因此您需要使用的路径是完全相对的路径:src/main/resources/avsc/FriendRequestAcceptedGson.avsc