The easiest way to do this is to use a URLClassLoader
instead of trying to do this from scratch from a byte stream. You can always write the .jar out to a temporary file and create a URL to that.
The code would look something like:
URLClassLoader loader = new URLClassLoader(
new URL[] {new URL("file://...")},
Thread.currentThread().getContextClassLoader());
loader.loadClass("com.mycompany.TheEntryPoint");
You can also detect the main class name (or invoke it) automatically using JarURLConnection
. (Oracle also has a tutorial on using this class.)