Running Groovy on .NET 2.0 using IKVM

Overview

It is possible to run Groovy on .NET 2.0 using IKVM as a virtual machine. By using IKVM compiler, you can compile your Groovy jar to be a .NET assembly (a DLL file) with the following command:

ikvmc -target:library groovy-all-1.5.0.jar

However, some warning will appear, but you can ignore them. After compilation you should have groovy-all-1.5.0.dll in the current directory.

Using the Groovy .NET Assembly

With the compiled DLL, you can use it as a normal .NET assembly. The following example shows how to add it as a reference for building a simple application. You need the SharpDevelop IDE in this case.

  • Open SharpDevelop, create a new .NET console application.
  • Add references, your groovy DLL, and all IKVM DLLs.
  • Open your main class, type the following code (in C# for example)
using System;
using System.Collections.Generic;

namespace GroovyDotNet {
  class MainClass {
    public static void Main(string[] args) {
      groovy.ui.InteractiveShell.main(args);
    }
  }
}
  • Run the program, and you'll also have an executable file as well (in ./Debug directory).

the original post:
http://chanwit.blogspot.com/2007/04/groovy-running-fine-on-net.html

Invoking .NET classes

We can call .NET classes directly from Groovy scripts. Note that IKVM has the cli prefix for all .NET namespaces. If you want to invoke Console.WriteLine('hello world'), you have to type:

cli.System.Console.WriteLine('hello world')

The great thing here is that Groovy can pick a correct .NET method. You can also try:

cli.System.Console.WriteLine('hello world {0}', 'from Groovy')

in the interactive console (the binary in the attachment of this page).

Encoding Issues

On some machines, there will be a test encoding issue to stop Groovy compiling script files. This seems to be the use of different encoding names between Java and .NET. If you find this kind of error, try specifying "-c" when testing with groovy.ui.GroovyMain class.

Further development as a Groovy module?

Discuss here.

Labels

 
  1. Apr 29, 2007

    glaforge says:

    Indeed, yes, that would be nice to have it somehow as a module\!

    Indeed, yes, that would be nice to have it somehow as a module!