Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

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:

Code Block
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)
Code Block
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:

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

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

Code Block
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.