Java application as standalone executable

     Java application cosnsists of Java Virtual Machine (JVM) and set of Java classes. JVM can be packaged as executable or be embedded in other application. Example of stand-alone JVM executable is java launcher, bundled with Java Development Kit (JDK). JVM is embedded in Java-capable browser and server. It is possible to write customized JVM wrapper - standard Java includes Java Native Interface (JNI) implementation, providing two-way interaction between C/C++ and Java code.
     Java classes can be delivered as set of files , archives or fetched over the network. It is possible to let JVM to get Java classes from any source. The mechanism for extending is called class loader
      Delivering Java application as combination of launcher and set of files poses security and maintaince problem - files with Java code has to be installed, launcher has to be aware of their exact location, etc. The paper discusses the solution that, by combining customized launcher and in-memory class loader, enables delivering Java application as single executable file.

General description

      The solution consists of two sets of utilities: Java classes converter and customized launcher. Java class converter takes Java classes packaged in standard form - as directory structure or archive ( jar ) files and outputs the same classes as object file. To make implementation more portable, intermediate file format is employed - intermediate file can be created in C or assembler programming languages.       Generated code is array of data, representing Java classes byte code. The code is linked with customized launcher, making bytecode available throw regular C references.
      Customized launcher works in two phazes: first, in-memory class loader itself is loaded in JVM; then reference to converted and compiled Java classes is passed down the in-memory class loader, making compiled Java classes available for JVM.
      In-memory class loader is also Java class, converted into compilable form and linked with launcher.

Source code

      Utilities source code, as well as sample launcher is available for browsing from here