IKVM 8.2.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package IKVM --version 8.2.1                
NuGet\Install-Package IKVM -Version 8.2.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="IKVM" Version="8.2.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add IKVM --version 8.2.1                
#r "nuget: IKVM, 8.2.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install IKVM as a Cake Addin
#addin nuget:?package=IKVM&version=8.2.1

// Install IKVM as a Cake Tool
#tool nuget:?package=IKVM&version=8.2.1                

IKVM - Java Virtual Machine for .NET

Nuget

What is IKVM?

IKVM is an implementation of Java for the Microsoft .NET platform. It can be used to quickly and easily:

  • Execute compiled Java code (bytecode) on .NET Framework or .NET Core
  • Convert bytecode to a .NET assembly to directly access its API in a .NET project

These tasks can be done without porting source code to .NET.

IKVM Components

  • A Java virtual machine (JVM) implemented in .NET
  • A .NET implementation of the Java class libraries
  • A tool that translates Java bytecode (JAR files) to .NET IL (DLL or EXE files).
  • Tools that enable Java and .NET interoperability

Run Java Applications with .NET

  1. Statically: By compiling a Java application into a .NET assembly using <MavenReference>, <IkvmReference> or ikvmc.
    • Libary assemblies can be referenced by any .NET application with a compatible target framework and platform. Types can be referenced by using the Java package name like a .NET namespace.
    • Executable assemblies can be launched by specifying the class containing the main() method to execute at runtime when building using ikvmc.
  2. Dynamically: By running a Java application using the ikvm tool, which can be used as a direct replacement for java.exe. The Java bytecode is converted on-the-fly to CIL and executed.

What IKVM is Not

  • A converter utility to transform Java source code to C# source code
  • A decompiler utitity to transform compiled Java bytecode to C# source code
  • A tool that runs .NET code in Java - all IKVM conversions are Java > .NET

Support

  • .NET Framework 4.6.1 and higher
  • .NET Core 3.1 and higher
  • .NET 5 and higher
  • Java SE 8

Documentation

See the tutorial to get started or IKVM.NET In Details for a more in-depth look.

Installation

NuGet

PM> Install-Package IKVM

Or, to use MavenReference:

PM> Install-Package IKVM.Maven.Sdk

Tools

The tools are a available for download on the Releases page.

Usage

IKVM supports integration with .NET SDK projects as well as low level tools for running compiled Java code directly or for advanced build scenarios. The 2 main entry points for integration with the .NET SDK are IkvmReference and MavenReference. .NET SDK projects can be built on the command line directly or using an IDE that supports them, such as recent versions Visual Studio or JetBrains Rider.

IkvmReference

IKVM includes build-time support for translating Java libraries to .NET assemblies. Install the IKVM package in a project that requires references to Java libraries. Use IkvmReference within an ItemGroup to indicate which Java libraries your project requires.

Example
<ItemGroup>
  <PackageReference Include="IKVM" Version="8.2.0" />
</ItemGroup>

<ItemGroup>
  <IkvmReference Include="..\..\ext\helloworld-2.0.jar" />
</ItemGroup>

The output assembly will be generated as part of your project's build process and a reference will automatically be added to your project so you can call APIs of the compiled .jar assembly. Additional metadata can be added to IkvmReference to customize the assembly that is generated.

Syntax
<ItemGroup>
   <IkvmReference Include="..\..\ext\helloworld-2.0.jar">
      <AssemblyName>MyAssembly</AssemblyName>
      <AssemblyVersion>3.2.1.0</AssemblyVersion>
      <AssemblyFileVersion>3.0.0.0</AssemblyFileVersion>
      <DisableAutoAssemblyName>true</DisableAutoAssemblyName>
      <DisableAutoAssemblyVersion>true</DisableAutoAssemblyVersion>
      <FallbackAssemblyName>MyAssemblyFallback</FallbackAssemblyName>
      <FallbackAssemblyVersion>3.1.0.0</FallbackAssemblyVersion>
      <KeyFile>MyKey.snk</KeyFile>
      <DelaySign>true</DelaySign>
      <Compile>SomeInternalDependency.jar;SomeOtherInternalDependency.jar</Compile>
      <Sources>MyClass.java;YourClass.java</Sources>
      <References>SomeExternalDependency.jar;SomeOtherExternalDependency.jar</References>
      <Aliases>MyAssemblyAlias;helloworld2_0</Aliases>
      <Debug>true</Debug>
   </IkvmReference>
</ItemGroup>
Attributes and Elements

The following values can be used as either an attribute or a nested element of <IkvmReference>.

Attribute or Element Description
Include (attribute only) The identity of the IkvmReference item. The value can be one of: <ul><li>path to a JAR file</li><li>path to a directory</li><li>an otherwise unimportant name</li></ul>
AssemblyName By default the AssemblyName is generated using the rules defined by the Automatic-Module-Name specification. To override this, do so here. The value should not include a file extension, .dll will be appended automatically.
AssemblyVersion By default the AssemblyVersion is generated using the rules defined by the Automatic-Module-Name specification. To override this, do so here.
AssemblyFileVersion By default the AssemblyFileVersion is generated using the rules defined by the Automatic-Module-Name specification or, if overridden, the same value as AssemblyVersion. To override this, do so here.
DisableAutoAssemblyName If true disables detection of AssemblyName.
DisableAutoAssemblyVersion If true disables detection of AssemblyVersion.
FallbackAssemblyName If AssemblyName is not provided or cannot be calculated, use this value.
FallbackAssemblyVersion If AssemblyVersion is not provided or cannot be calculated, use this value.
KeyFile Specifies the filename containing the cryptographic key. When this option is used, the compiler inserts the public key from the specified file into the assembly manifest and then signs the final assembly with the private key.
DelaySign This option causes the compiler to reserve space in the output file so that a digital signature can be added later. Use DelaySign if you only want to place the public key in the assembly. The DelaySign option has no effect unless used with KeyFile.
Compile A semi-colon separated list of Java class path items to compile into the assembly. By default this value is the Identity of the item, if the identity of the item is an existing JAR file or directory (not yet supported). MSBuild globs are supported to reference multiple JAR or .class files.
Sources A semi-colon separated list of Java source files to use during documentation generation. (not yet supported)
References Optional semi-colon separated list of other IkvmReference identity values to specify as a reference to the current one. For example, if foo.jar depends on bar.jar, include both as IkvmReference items, but specify the identity of bar.jar on the References metadata of foo.jar.
Debug Optional boolean indicating whether to generate debug symbols. By default this is determined based on the <DebugType> and <DebugSymbols> properties of the project. Only full debug symbols are currently supported.
Aliases A semi-colon separated list of aliases that can be used to reference the assembly in References.
All other metadata supported on the Reference MSBuild item group definition.

IkvmReference is not transitive. Including it in one project and adding a dependency to that project from a second project will not result in the same reference being available on the second project. Instead, add the reference to each project.

For each project to resolve to the same resulting assembly ensure their settings are identical.

Multiple IkvmReference entries can be configured to include each other as references.

<ItemGroup>
   <IkvmReference Include="helloworld.jar">
      <AssemblyVersion>1.0.0.0</AssemblyVersion>
   </IkvmReference>
   <IkvmReference Include="helloworld-2.jar">
      <AssemblyName>helloworld-2</AssemblyName>
      <AssemblyVersion>2.0.0.0</AssemblyVersion>
      <References>helloworld.jar</References>
      <Aliases>helloworld2</Aliases>
   </IkvmReference>
</ItemGroup>
Automatic-Module-Name Specification

The Automatic-Module-Name is either a specified attribute of the JAR manifest, which can be found in the META-INF/MANIFEST.MF file inside the JAR, or a generated value based on the name of the JAR file. See the documentation for more information.

MavenReference

See the ikvm-maven Readme for usage instructions.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.1 is compatible. 
.NET Framework net461 is compatible.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (94)

Showing the top 5 NuGet packages that depend on IKVM:

Package Downloads
TikaOnDotNet

Bare-bones IKVM Java-to-.NET port of Apache Tika. You'll want to install TikaOnDotNet.TextExtractor.

Stanford.NLP.CoreNLP

Stanford CoreNLP provides a set of natural language analysis tools which can take raw English language text input and give the base forms of words, their parts of speech, whether they are names of companies, people, etc., normalize dates, times, and numeric quantities, and mark up the structure of sentences in terms of phrases and word dependencies, and indicate which noun phrases refer to the same entities. Stanford CoreNLP is an integrated framework, which make it very easy to apply a bunch of language analysis tools to a piece of text. Starting from plain text, you can run all the tools on it with just two lines of code. Its analyses provide the foundational building blocks for higher-level and domain-specific text understanding applications.

CuratorIkvm

Curator client library & recipes for Zookeeper. This is the IKVM version; which is to say that this is compiled from Java to .NET

IKVM.Maven.Sdk

Java SE 8 Virtual Machine for .NET (Maven SDK)

OpenNLP.NET

The Apache OpenNLP library is a machine learning based toolkit for the processing of natural language text. It supports the most common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, parsing, and coreference resolution. These tasks are usually required to build more advanced text processing services. OpenNLP also included maximum entropy and perceptron based machine learning.

GitHub repositories (6)

Showing the top 5 popular GitHub repositories that depend on IKVM:

Repository Stars
apache/lucenenet
Apache Lucene.NET
ikvmnet/ikvm
A Java Virtual Machine and Bytecode-to-IL Converter for .NET
vivami/SauronEye
Search tool to find specific files containing specific words, i.e. files containing passwords..
sergey-tihon/Stanford.NLP.NET
Stanford NLP for .NET
paulirwin/JavaToCSharp
Java to C# converter
Version Downloads Last updated
8.10.3 14,104 10/31/2024
8.10.2 48,939 9/14/2024
8.10.1 42,912 8/20/2024
8.10.0 14,351 8/18/2024
8.10.0-pre.1 859 8/14/2024
8.9.1 39,058 7/14/2024
8.9.0 6,565 7/12/2024
8.9.0-pre.3 874 7/10/2024
8.9.0-pre.2 617 7/9/2024
8.9.0-pre.1 840 7/6/2024
8.8.1 21,155 5/31/2024
8.8.0 35,042 4/17/2024
8.8.0-pre.1 677 3/28/2024
8.7.6 2,744 4/8/2024
8.7.5 68,207 1/28/2024
8.7.4 7,918 1/18/2024
8.7.3 22,083 12/9/2023
8.7.2 2,566 12/8/2023
8.7.1 72,541 11/1/2023
8.7.0 1,772 10/30/2023
8.7.0-pre.3 342 10/27/2023
8.7.0-pre.2 787 10/16/2023
8.7.0-pre.1 640 10/10/2023
8.6.4 85,678 9/10/2023
8.6.3-tags-8-6-3-pre-24.1 906 8/10/2023
8.6.3-tags-8-6-3-pre-11.1 352 8/8/2023
8.6.2 81,333 7/9/2023
8.6.1 9,976 7/7/2023
8.6.0 4,909 7/5/2023
8.5.2 26,933 6/7/2023
8.5.1 6,673 6/2/2023
8.5.0 11,739 5/14/2023
8.5.0-prerelease0001 303 5/12/2023
8.5.0-develop2513 645 5/4/2023
8.5.0-develop1599 387 5/3/2023
8.5.0-develop0690 2,068 2/8/2023
8.4.5 78,343 2/7/2023
8.4.5-prerelease0001 302 2/6/2023
8.4.4 41,021 1/2/2023
8.4.4-prerelease0001 370 1/2/2023
8.4.3 868 1/1/2023
8.4.2 9,391 12/30/2022
8.4.1 3,480 12/28/2022
8.4.0 20,018 12/6/2022
8.4.0-prerelease0001 826 11/26/2022
8.3.3 27,242 11/20/2022
8.3.2 2,674 11/17/2022
8.3.1 4,667 11/17/2022
8.3.0 3,063 11/16/2022
8.3.0-prerelease0395 2,601 10/30/2022
8.3.0-prerelease0394 1,630 10/26/2022
8.2.3 126,167 10/25/2022
8.2.2-prerelease0856 1,603 10/12/2022
8.2.2-prerelease0553 2,309 9/21/2022
8.2.2-prerelease0396 1,404 9/20/2022
8.2.2-prerelease0241 1,398 9/5/2022
8.2.2-prerelease0163 1,462 8/26/2022
8.2.2-prerelease0106 1,234 8/26/2022
8.2.2-prerelease0051 1,419 8/25/2022
8.2.1 307,174 7/25/2022
8.2.0 65,079 7/3/2022
8.2.0-prerelease3420 5,329 7/2/2022
8.2.0-prerelease2777 4,905 6/30/2022
8.2.0-prerelease2138 4,558 6/28/2022
8.2.0-prerelease1515 4,880 6/24/2022
8.2.0-prerelease0911 7,865 6/16/2022
8.2.0-prerelease0899 6,991 6/15/2022
8.2.0-prerelease0892 2,319 6/14/2022
8.2.0-prerelease0809 2,673 6/6/2022
8.2.0-prerelease0392 3,009 5/29/2022