I am in the process of writing a rule engine that performs simple assignments as determined by conditional constructs. It is a prerequisite of the project that the rules be in XML format. I have modeled my XML schema to resemble simple code blocks. I wish to parse the XML and to then transform it into Java code. I then wish to compile (and run) this code at runtime. Doing so would mean that my rule engine no longer acts as an interpreter but executes native Java Byte Code.

I have figured out the parsing stage and more or less the Java code generation phase. I would now like to figure out the last phase - the compile at runtime phase.

Following this thread: [Compile to java bytecode (without using Java)](https://stackoverflow.com/questions/688098/compile-to-java-bytecode-without-using-java) I have become aware of the following possible solutions:

* [ASM](http://asm.objectweb.org/)
* [BCEL](http://jakarta.apache.org/bcel/)
* [Trove](http://teatrove.sourceforge.net/trove.html)

I would love a comparison of these as well as other suggestions for solving the Java compile at runtime phase.
['https://Stackoverflow.com/questions/1064259', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/101715/']
You could transform it into Clojure code, and the Clojure compiler will turn it into bytecode for you.
you can fork a process like this

```
Process p = Runtime.getRuntime().exec("java -classpath "..." SomeClassContainingMain ...other arguments);       

        //you need to consume the outputs of the command if output/error is large otherwise the process is going to hang if output/error buffer is full. and create a seperate thead for it (not created here).
        log.debug("PROCESS outputstream : " + p.getInputStream() );
        log.debug("PROCESS errorstream : " + p.getErrorStream());           
    p.waitFor(); // Wait till the process is finished

```

and can compile and run it.