【问题标题】:How do I use a classloader to get inputstream on a model.zip file where the zip file is wrapped in a .jar file in classpath如何使用类加载器获取 model.zip 文件的输入流,其中 zip 文件包装在类路径中的 .jar 文件中
【发布时间】:2018-08-19 04:20:50
【问题描述】:

问题:

我们有一个码头网络应用程序,在应用程序代码中,我试图访问类路径中 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")

但当然,我没有正确处理此资源并最终得到一个空指针异常。我究竟做错了什么?我不应该能够使用 getClass().getResourceAsStream() 方法访问类路径中的 jar 文件中的文件吗?

脚注:

由于 model.zip 太大,我们决定不将其与代码库一起发布。因此,我们将其推送到一个 nexus 存储库中,并通过 gradle 编译依赖项引用该 jar,如下所示:

compile "com.company.group.nlp:my-model:1.0@jar"

构建发行版会拉取这个 jar,并将其放入应用程序/库中的事实告诉我 gradle 完成了它的一部分(将依赖项下载到类路径)。问题仍然是我似乎无法找到访问 my-model.jar 中的 mymodel.zip 的方法

【问题讨论】:

  • 我认为an answer to another question 可能会帮助你
  • 在前面放一个/getClass().getResourceAsStream("/johnsnow/mymodel.zip")
  • 这似乎有效,伙计们!非常感谢!

标签: java classloader jetty-9 jetty-8


【解决方案1】:

尝试在文件路径中添加斜线:

getClass().getResourceAsStream("/johnsnow/mymodel.zip");

它会告诉java从根文件夹开始寻找类,而不是从当前类包中。

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 2013-09-06
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2012-02-15
    • 2023-03-18
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多