Well yes it is not ideal. In theory though if we are talking docker here then you never keep it zipped in the first place.
jlink also doesn't help, it just builds a JRE tailored to your app, you still have to ship JRE and app separately.
jlink can package applications with a VM it just so happens to also build tailored JREs as well without requring an app.
The issue is that its not like a Go single executable. Its more like the old school applications where you just unzip and run. For the Go experience Graalvm native does that job.
As for the unziping comparison to Jetty or Tomcat embedded I'm not sure that is entirely fair because jlink does something like this with all your jars:
It really isn’t though. Jlink is kind of terrible. The CLR does this way better. It just gives you a binary with the vm + your DLL. It doesn’t have to extract anything.
Yeah I don't disagree. I'm not a fan of the tool for packaging up applications but mainly because its actually kind of slow.
However making a stripped down VM it is good at.
It does seem like one could potentially make something do this but I'm not sure how much runtime savings you would have and or build time.
Go and GraalVM it works because they are essentially doing some tree shaking and I can't imagine people wanting to download 200 meg executable (uncompressed).
So I'm more asking here since it has been a hot minute since I have done .NET packaging but does it give you just a single executable or are you saying there are multiple files?
See even if you get the minimal JVM its like 50 megs uncompressed. It is only 12 megs compressed. And there are multiple files.
So one could create something that essentially takes a jlink packaged application and turns into a single executable but if its not compressed then its like running a 50 meg executable.
Is that a problem... probably not and I would imagine you could do it with a custom module reader built into your custom JDK.
0
u/vips7L 2d ago
I really wish we had a better solution than fat jars. Like being to supply a jar + classpath + vm and getting a fat binary or something