![]() |
VOOZH | about |
dotnet add package IKVM --version 8.15.0
NuGet\Install-Package IKVM -Version 8.15.0
<PackageReference Include="IKVM" Version="8.15.0" />
<PackageVersion Include="IKVM" Version="8.15.0" />Directory.Packages.props
<PackageReference Include="IKVM" />Project file
paket add IKVM --version 8.15.0
#r "nuget: IKVM, 8.15.0"
#:package IKVM@8.15.0
#addin nuget:?package=IKVM&version=8.15.0Install as a Cake Addin
#tool nuget:?package=IKVM&version=8.15.0Install as a Cake Tool
IKVM is an implementation of Java for the Microsoft .NET platform. It can be used to quickly and easily:
These tasks can be done without porting source code to .NET.
<MavenReference>, <IkvmReference> or ikvmc.
main() method to execute at runtime when building using ikvmc.java executable inside of the JDK Runtime Image. The Java bytecode is converted on-the-fly to CIL and executed. The experience should be identical to a normal JDK.Various differences exist between support for all of our different artifacts. For instance, there are some platforms we cannot distribute images for and some platforms we cannot distribute tools for.
PM> Install-Package IKVM
Or, to use MavenReference:
PM> Install-Package IKVM.Maven.Sdk
The tools are available for download on the Releases page.
Both a JRE and JDK runtime image are available. These images are standard JRE or JDK directory structures containing all of the standard tools: javac, jdeps, policytool, keytool, etc. Some Java libraries may require either a JRE or JDK, and if so, the IKVM.Image.JRE or IKVM.Image.JDK package should be added to your project.
PM> Install-Package IKVM.Image.JRE
PM> Install-Package IKVM.Image.JDK
A standalone JDK distributable is available for download on the Releases page. This directory structure should suffice as a JAVA_HOME path for standard Java applications.
IKVM supports integration with .NET SDK-style 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-style projects are IkvmReference and MavenReference. .NET SDK-style 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.
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.
<ItemGroup>
<PackageReference Include="IKVM" Version="Version" />
</ItemGroup>
<ItemGroup>
<IkvmReference Include="..\..\ext\helloworld\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.
<ItemGroup>
<IkvmReference Include="..\..\ext\helloworld\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>portable</Debug>
</IkvmReference>
</ItemGroup>
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 value indicating how to generate debug symbols. By default this is determined based on the <DebugType> 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. |
ClassLoader |
A fully qualified classs name of the custom ClassLoader implementation to use as a delegation parent. Examples include ikvm.runtime.AppDomainAssemblyClassLoader and ikvm.runtime.ClassPathAssemblyClassLoader. |
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 SpecificationThe 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.
See the ikvm-maven Readme for usage instructions.
The IKVM project recommends that people do not redistribute FOSS Java libraries compiled with IKVM over public systems such as NuGet.org, unless you are the original owner of that software and have a compelling reason.
Creating copies of FOSS Java libraries and publishing them to distribution mechanisms such as NuGet.org creates eco-system confusion and dependency conflicts downstream. We provide a system so that .NET users of Java libraries can reference those libraries directly out of the standard Java ecosystem mechanisms: Maven Central, etc though IKVM.Maven. Remember, very few libraries exist in a vacuum. Libraries often depend on dozens of other libraries. Two unrelated Java libraries often depend on the same underlying Java library. A complex method of dependency conflict resolution and version unification has to be involved in resolving this hierarchy for any individual downstream project. You are likely going to be introducing duplicate classes into the users of your versions, or causing your users to depend upon the wrong version of other libraries.
In addition to the above, we presently do not guarentee that API between statically compiled assemblies and the IKVM.Java and IKVM.Runtime libraries remains stable. A statically compiled assembly built against one version of IKVM is not guarenteed to run against a higher version of IKVM, even at the patch level. We would like to advertise better support for this in the future, but at present there is a lot of work planned for the IKVM.Runtime and IKVM.Java APIs that we don't want to inhibit. Since we also provide build tools to make the process of recompiling assemblies from the build machine easy, if recommendations are followed, this should be of limited impact.
There are exceptions to this advice, such as the library not being published to Maven. In that case, guidance would be to advocate that the original Java library in fact be published to Maven, or do the work yourself, as that is the appropriate place for Java libraries.
We cannot force you to conform to this advice. But for the health of the ecosystem, we urge you to take it under consideration yourself.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 net6.0 is compatible. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Framework | net472 net472 is compatible. net48 net48 was computed. net481 net481 was computed. |
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. |
|
|
IKVM.Maven.Sdk
Java SE 8 Virtual Machine for .NET (Maven SDK) |
|
|
CuratorIkvm
Curator client library & recipes for Zookeeper. This is the IKVM version; which is to say that this is compiled from Java to .NET |
|
|
FlexLucene
FlexLucene is a port of Java Lucene using IKVM. It uses tools like ProGuard, Mono Cecil to produce idiomatic .net code which hides most of the Java styles apparent with the IKVM generated libraries. Some of the enhancements done are: - All the namespaces are converted from usual org.apache.lucene.* to FlexLucene.*. - All method names are converted to use .net style naming convention that is PascalCase rather than camelCase. - All Java hashCode methods are converted to GetHashCode. - Proper Equals and ToString implementation for classes. - There are certain cases when the method name cannot be converted as it is coming from a java SDK class (i.e. close method present in classes implementing Closable). In such cases we have added a helper method to the class with the proper name (PascalCase). - Java allows usage of same name for a public field and method which is not possible in C#. Such cases are handled by renaming the field. A lot more refinements and optimizations are planned in future. Changes 6.0 - Upgraded the version of spatial4j which lead to many namespace changes. - Lucene has deprecated a number of classes. Refer to Lucene 6.0.0 release notes for a list of changes. Changes 6.0.1 - Fixed resource loading issue with German analyzer. Changes 6.0.2 - Port of Lucene 6.0.1 release. Changes 6.1.0 - Port of Lucene 6.1.0 release. Changes 6.3.0 - Port of Lucene 6.3.0 release. - Added support for Japanese analyzer. |
Showing the top 7 popular GitHub repositories that depend on IKVM:
| Repository | Stars |
|---|---|
|
apache/lucenenet
Apache Lucene.NET is an open-source full-text search library written in C#, ported from the Apache Lucene project.
|
|
|
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
|
|
|
ArtifexSoftware/Ghostscript.NET
Ghostscript.NET - managed wrapper around the Ghostscript library (32-bit & 64-bit). Tested with Ghostscript versions < 10.
|
|
|
paulirwin/JavaToCSharp
Java to C# converter
|
|
|
ClemensFischer/XAML-Map-Control
XAML Map Control Library
|
|
|
fireshaper/Omnibus
Search for and download comics that are added to GetComics.info easily
|
| Version | Downloads | Last Updated |
|---|---|---|
| 8.15.0 | 123,714 | 12/6/2025 |
| 8.15.0-dev.46 | 837 | 12/5/2025 |
| 8.14.0 | 29,256 | 10/1/2025 |
| 8.14.0-tags-8-14-0-pre-1.1 | 507 | 9/30/2025 |
| 8.13.4 | 2,275 | 9/26/2025 |
| 8.13.2 | 10,248 | 9/7/2025 |
| 8.13.1 | 4,564 | 8/7/2025 |
| 8.13.0 | 9,465 | 8/4/2025 |
| 8.12.0 | 26,714 | 6/27/2025 |
| 8.11.2 | 126,822 | 3/10/2025 |
| 8.11.1 | 36,665 | 2/16/2025 |
| 8.11.0 | 84,860 | 2/3/2025 |
| 8.11.0-pre.4 | 1,429 | 1/30/2025 |
| 8.11.0-pre.2 | 2,866 | 12/29/2024 |
| 8.11.0-pre.1 | 2,203 | 12/16/2024 |
| 8.10.3 | 152,096 | 10/31/2024 |
| 8.10.2 | 130,635 | 9/14/2024 |
| 8.10.1 | 152,522 | 8/20/2024 |
| 8.10.0 | 64,025 | 8/18/2024 |