As you may or may not know, the compiler that is included in the Ja.NET SE JDK distribution is based on the Eclipse JDT compiler source code. Off the top of my head, I think it is based on the 3.4.2 version of the compiler, but don't quote me on that.
Anyway, what I did in creating the compiler is to add an additional IL code generation "backend" to the compiler in addition to the Java byte code (JBC) generator that already existed. Of course, in doing this, I didn't disable or break the existing JBC code generator, I just "hard coded" the compiler to emit IL instead of JBC. Under a normal invocation of the compiler, the IL generator will produce .NET assemblies with the .class file extension for each compiled Java class contained in the source files.
Now, for quite sometime you have always been able to use the -java option on the javac command line to override the default behavior and cause the compiler to produce JBC class files instead of ones containing IL. Of course, since the Ja.NET SE distribution includes the Harmony JVM, you were able run those class files using the Ja.NET SE distribution simply by using the launcher to invoke the Harmony JVM instead of .NET using the command line "java -vmdir:drlvm x.y.z". There is nothing special about the JBC class files, so you can also run these classes on other JVMs as well.
One of the changes I made some time ago, and is in the 358 build, is the addition of the javac -both option. This causes the compiler to emit BOTH IL and JBC files during a single invocation of the compiler. The compiler produces files with a .class file extension when emitting the JBC and it produces another set of files with the .clazz file extension when emitting the .NET assemblies. If you want a merged .NET assembly, instead of .clazz files, you can include the compilers -bam[:assemName] option in addition to -both and it will merge the .clazz files into a single .NET assembly leaving only the .class files and the merged assembly in the output directory. Of course you can then run what you have built either on .NET or the Harmony JVM simply by changing the command line options on the Java launcher: "java -vmdir:drlvm a.b.c OR java a.b.c"
So why did I add this to the compiler? To make it easy to take existing open source Java projects and, with little or no changes to the projects source code or build scripts, build a single binary distribution that will run on .NET or a JVM. This simple -both option is used by the additional tools (Ja.NET-SE-Additional Development Tools.zip) which I have included in the download section on the sourceforge.net.
Stay tuned, and I'll describe how this all comes together in my upcoming blogs.