IKVM es una implementación de código abierto de la máquina virtual Java (JVM) para el entorno .NET escrita en C#.
IKVM supone la interoperabilidad entre mundos de desarrollo aparentemente incompatibles, permitiendo ejecutar código Java en la plataforma .NET. Proporciona una interfaz para que los programas escritos en lenguajes .NET interactúen con bibliotecas Java.
Esto significa que los desarrolladores pueden utilizar bibliotecas y aplicaciones Java existentes en proyectos .NET sin necesidad de reescribir el código por completo.
IKVM se compone de
- Una máquina virtual de Java (JVM) implementada en .NET
- Una implementación de las bibliotecas de clases de Java en .NET
- Una herramienta que traduce el bytecode de Java (archivos JAR) a IL de .NET (archivos DLL o EXE).
- Herramientas que permiten la interoperabilidad entre Java y .NET
- Una imagen completa de tiempo de ejecución de JRE/JDK 8.
Se pueden utilizar clases, métodos y bibliotecas Java directamente desde el código .NET y viceversa. De esta forma podemos reaprovechar funcionalidades específicas de una biblioteca o plataforma existente sin tener que realizar una conversión completa de código.
La biblioteca está diseñada para optimizar el rendimiento y minimizar la sobrecarga de conversión y ejecución. Esto permite que las aplicaciones que utilizan IKVM puedan ejecutarse de manera eficiente y sin (demasiados) problemas.
Cómo usar IKVM
Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del paquete Nuget correspondiente.
Install-Package IKVM
Aquí tenéis algunos de cómo utilizar IKVM extraídos de la documentación de la librería
Usando código de Java en C#
Vamos a ver cómo podemos usar código de Java directamente en nuestro programa de .NET, gracias a IKVM. Aquí tenéis un ejemplo.
// Crear una instancia de una clase Java
var javaInstance = new java.util.Date();
// Invocar un método Java desde .NET
javaInstance.setDate(10);
// Obtener un resultado de un método Java
var result = javaInstance.getDate();
// Imprimir el resultado
Console.WriteLine(result);
En este ejemplo, utilizamos IKVM para crear una instancia de la clase Java java.util.Date. Luego, usamos el método setDate para establecer el día del mes en 10. Por último, llamamos el método getDate para obtener el día del mes actualizado y e imprimir el resultado.
Añadir un fichero .jar a nuestro proyecto
También podemos añadir una biblioteca de Java (.jar) como si fuera un ensamblado o una DLL en .NET.
Para ello debemos editar el fichero de configuración de nuestro proyecto y, simplemente, añadir la referencia a nuestro fichero .jar.
<ItemGroup>
<PackageReference Include="IKVM" Version="Version" />
</ItemGroup>
<ItemGroup>
<IkvmReference Include="..\..\ext\helloworld\helloworld-2.0.jar" />
</ItemGroup>
Las funciones definidas en este fichero estarán accesibles desde nuestro programa en .NET.
IKVM es Open Source, y todo el código y documentación está disponible en el repositorio del proyecto en https://github.com/ikvmnet/IKVM