Bundling openjdk-11-jdk into a snap


#1

I am having trouble bundling openjdk-11-jdk (or openjdk-11-jre) into my snap.
I added it to the stage-packages section and it is indeed installed, however, it seems the update-alternatives command is not executed when installing it. Therefore the /usr/bin/java, usr/bin/javac, etc. soft links are not created and my application is unable to start java (command not found). I am not sure how to best work around this problem. Shall I create the soft links manually somewhere in my build process or shall I call sudo update-alternatives at some point to do it? Any better option?


#2

Take a look at how we did this in the jenkins snap. We move directories around to make them non-arch specific, and put the cacerts file in the right place. It’s not super pretty, but it works, and means we can build for any supported architecture too.


#3

That didn’t work for me. I ended up with a different solution:

environment:
  JAVA_HOME: "$SNAP/usr/lib/jvm/java-11-openjdk-amd64"
  PATH: "$JAVA_HOME/bin:$PATH"

That works nicely and looks pretty clean.


#4

The only flaw with that is it’ll only work on amd64 systems. That’s fine if you only want to support that architecture, but I needed to support multiple architectures.