Have you ever found a neat-looking API that would save you tons of time and pain, only to have your hopes crushed when you discover that the API is written in Java? Well, fret no more, because there’s a nice, easy way to leverage tasty Java APIs from within .NET: just compile them to IL using IKVM.NET!
I’m currently using the excellent Weka machine learning library from .NET. Here’s the code:
1: /// <summary>
2: /// Simple ad-hoc class for testing out the Weka API from .NET.
3: /// </summary>
4: public class AdHocTests
5: {
6: /// <summary>
7: /// Tests COBWEB.
8: /// </summary>
9: public void CobwebTest()
10: {
11: string input = @"D:\Program Files (x86)\Weka-3-5\data\soybean.arff";
12:
13: Instances instances = new Instances(new java.io.FileReader(input));
14:
15: Cobweb cobweb = new Cobweb();
16:
17: Console.WriteLine("Clusters before: {0}.", cobweb.numberOfClusters());
18:
19: cobweb.buildClusterer(instances);
20:
21: Console.WriteLine("Clusters after: {0}.", cobweb.numberOfClusters());
22:
23: Console.WriteLine(cobweb.graph());
24: }
25: }
To convert an existing Java .jar file into a .NET DLL, simple run “ikvmc.exe –target:library something.jar”. After a bit of chugging, you should get “something.dll”, ready for use in .NET. Be sure you add references to IKVM.OpenJDK.ClassLibrary.dll and IKVM.Runtime wherever you use your new DLL.
Can I ask how stable/mature is this ? ( the use of jars converted to dlls ?
Also, how much does it affect the performance of the converted jar ?
Thanks for the post !
@David,
I’ve only used it a little (and only with Weka), but I have not run into any stability issues so far. The performance of the .NET version of Weka seems to be noticeable better than the Java version, which is nice. 🙂