Earlier quoted context omitted.
You can build "fat jars" that contain all dependencies. IMO, this is how most Java apps should be deployed.
You still have issues of needing a JVM. The JVM is not a small runtime considation. I'm in the process of converting to GO since I have more time than money. 1 JVM in Docker uses 512 MB to sit still. A Go version is around 16.
- Bundle all C/C++ native libraries, and link them all together with the java launcher - e.g you produce your own java.exe that has your C/C++ libraries linked in, then you slap the .jar file - for extra bonus you can slap at the back of your .exe and make it load from there
Voila - you have single executable (almost) with all you need, and you don't need to unpack .dll's anywhere
But... you must compile java.exe yourself...