问题:
我们有一个码头应用程序,在应用程序代码中,我试图访问classpath中jar中的一个zip。这是libs文件夹中的jar:
/path/to/app/x.x.0-SNAPSHOT/apps/libs/my-model.jar
其中 my-model.jar 实际上是一个空的文件夹,其中包含model.zip文件。如果解压缩此jar,则会得到 johnsnow / mymodel.zip
我的应用程序代码尝试以以下方式访问此zip:
getClass().getResourceAsStream("johnsnow/mymodel.zip")
但是,当然,我没有对此资源的正确处理,并且最终得到了nullpointer异常。我究竟做错了什么?我不应该使用getClass().getResourceAsStream()
方法访问classpath中jar文件中的文件吗?
脚注:
由于model.zip太大,我们决定不随代码库一起提供。因此,我们将其推送到一个nexus存储库中,并通过gradle编译依赖项引用了jar,如下所示:
compile "com.company.group.nlp:my-model:1.0@jar"
构建发行版会拉动这个jar,并将其放在apps / libs中,这告诉我gradle会发挥作用(将依赖项下载到类路径中)。问题仍然是我似乎找不到在my-model.jar中访问mymodel.zip的方法
答案 0 :(得分:2)
尝试在文件路径中添加斜杠:
getClass().getResourceAsStream("/johnsnow/mymodel.zip");
它将告诉Java开始从根文件夹而不是从当前类包中查找类。