2014-10-28 162 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