0

The issue:

We have a jetty web-app, and in the application-code, I am trying to access a zip within a jar in classpath. Here's the jar in the libs folder:

/path/to/app/x.x.0-SNAPSHOT/apps/libs/my-model.jar

where my-model.jar is really just an empty folder with model.zip file inside it. If I extract this jar, I get johnsnow/mymodel.zip

My application code tries to access this zip as:

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

but of course, I don't get a proper handle to this resource and wind up getting a nullpointer exception. What am I doing wrong? Shouldn't I be able to access a file within a jar file in classpath using the getClass().getResourceAsStream() method?

Footnote:

Because model.zip was too large, we decided against shipping it with the code base. Thus we pushed it into a nexus repository, and reference the jar via a gradle compile dependency as follows:

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

The fact that building the distribution pulls this jar, and puts it in apps/libs tells me that gradle does its part (of downloading the dependency to a classpath). The issue remains that I can't seem to find a way to access mymodel.zip inside my-model.jar

apil.tamang
  • 2,545
  • 7
  • 29
  • 40

1 Answers1

2

Try adding a slash to the file path:

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

It will tell java to start looking for the class from the root folder, not from the current class package.

Igor Kanshyn
  • 867
  • 6
  • 13