ikvm

2025-12-11 0 959

ikvm -.NET的Java虚拟机

什么是ikvm ?

ikvm是Microsoft .NET平台的Java实现。它可以用来快速轻松:

  • 执行.NET框架或.NET CORE上的编译Java代码(bytecode)
  • 字节码转换为.NET组件,以直接在.NET项目中访问其API

这些任务可以执行,而无需将源代码移植到.NET。

ikvm组件

  • .NET中实现的Java虚拟机(JVM)
  • Java类库的.NET实现
  • 将Java字节码(JAR文件)转换为.NET IL(DLL或EXE文件)的工具。
  • 启用Java和.NET互操作性的工具
  • 完整的JRE/JDK 8运行时映像。

使用.NET运行Java应用程序

  1. 静态:通过使用<MavenReference>< ikvm Reference>ikvm c将Java应用程序编译为.NET组件。
    • 可以通过任何.NET应用程序引用库组件,该应用程序具有兼容目标框架和平台。可以通过使用Java软件包名称(例如.NET名称空间)来引用类型。
    • 可以通过指定包含main()方法在运行时执行时使用ikvm c在运行时执行的类的类来启动可执行组件。
  2. 动态:通过使用JDK运行时映像内部的java可执行文件运行Java应用程序。 Java字节码在即时转换为CIL并执行。经验应与普通JDK相同。

ikvm不是

  • 转换器实用程序以将Java源代码转换为C#源代码
  • 将编译的Java字节码转换为c#源代码的分解式UTITITIT
  • 在Java中运行.NET代码的工具 – 所有ikvm转换都是Java> .net

支持

  • .NET框架4.7.2及更高(SDK风格的项目)
  • .NET 6及更高
  • Java SE 8
  • Windows X86/X64/ARM64
  • Linux X64/ARM/ARM64(GLIBC和MUSL)
  • Mac OS X X64/ARM64

对我们所有不同人工制品的支持之间存在各种差异。例如,有一些我们无法为图像分发的平台,以及我们无法为工具分发工具的一些平台。

安装

nuget

 PM> Install-Package ikvm

或者,使用MavenReference

 PM> Install-Package ikvm .Maven.Sdk

工具

这些工具可在版本页面上下载。

运行时图像

JRE和JDK运行时映像都可用。这些图像是包含所有标准工具的标准JRE或JDK目录结构:Javac,jdeps,PolicyTool,Keytool等。某些Java库可能需要JRE或JDK,如果是这样,则应将ikvm .Image.JREikvm .Image.JDK添加到您的项目中。

ikvm.Image.JRE
PM> Install-Package ikvm .Image.JDK\”>

 PM> Install-Package ikvm .Image.JRE
PM> Install-Package ikvm .Image.JDK

可以在“发行版”页面上下载独立的JDK分发。该目录结构应足以作为标准Java应用程序的JAVA_HOME路径。

用法

ikvm支持与.NET SDK式项目的集成以及直接运行编译Java代码或用于高级构建方案的低级工具。与.NET SDK式项目集成的两个主要入口点是ikvm ReferenceMavenReference 。 .NET SDK风格的项目可以直接在命令行上构建,也可以使用支持它们的IDE,例如最近版本的Visual Studio或Jetbrains Rider。

ikvm参考

ikvm包括用于将Java库转换为.NET组件的构建时间支持。在需要引用Java库的项目中安装ikvm软件包。在ItemGroup中使用ikvm Reference来指示您的项目所需的Java库。

例子

ikvm" Version="Version" />
</ItemGroup>

<ItemGroup>
< ikvm Reference Include="..\\..\\ext\\helloworld\\helloworld-2.0.jar" />
</ItemGroup>\”>

< ItemGroup >
  < PackageReference Include = \" ikvm \" Version = \" Version \" />
</ ItemGroup >

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

输出组件将作为您项目构建过程的一部分生成,并将自动添加参考,以便您调用编译.jar组件的API。可以将其他元数据添加到ikvm Reference中,以自定义生成的程序集。

句法

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>
</ ikvm Reference>
</ItemGroup>\”>

< ItemGroup >
   < ikvm Reference 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 >
   </ ikvm Reference >
</ ItemGroup >

属性和元素

以下值可以用作< ikvm Reference>的属性或嵌套元素。

属性或元素 描述
Include (仅属性) ikvm Reference项目的身份。该值可以是:

  • 通往罐子文件的路径
  • 通往目录的路径
  • 原本不重要的名字
AssemblyName 默认情况下,使用Automatic-Module-Name规范定义的规则生成AssemblyName 。为了覆盖这一点,请在这里这样做。该值不应包括文件扩展名, .dll将自动附加。
AssemblyVersion 默认情况下,使用Automatic-Module-Name规范定义的规则生成AssemblyVersion 。为了覆盖这一点,请在这里这样做。
AssemblyFileVersion 默认情况下,使用由Automatic-Module-Name规范定义的规则或(如果覆盖)与AssemblyVersion相同的值生成AssemblyFileVersion 。为了覆盖这一点,请在这里这样做。
DisableAutoAssemblyName 如果true禁用了AssemblyName的检测。
DisableAutoAssemblyVersion 如果true禁用了对AssemblyVersion的检测。
FallbackAssemblyName 如果未提供或无法计算AssemblyName ,请使用此值。
FallbackAssemblyVersion 如果未提供或无法计算AssemblyVersion ,请使用此值。
KeyFile 指定包含加密密钥的文件名。使用此选项时,编译器将公共密钥从指定的文件插入汇编清单中,然后用私钥签署最终程序集。
DelaySign 此选项使编译器保留在输出文件中的空间,以便稍后可以添加数字签名。如果您只想将公共密钥放入组件,请使用DelaySign 。除非与KeyFile一起使用, DelaySign选项没有效果。
Compile 半彩色的Java类路径项目列表以编译为组件。默认情况下,如果项目的身份是现有的JAR文件或目录(尚未支持),则此值是项目的Identity 。支持MSBuild Globs参考多个JAR或.class文件。
Sources 在文档生成期间要使用的半彩列列表。 (尚未支持)
References 可选的半彩色分离列表的其他ikvm Reference身份值,以指定为当前的参考。例如,如果foo.jar依赖于bar.jar ,则将两者都作为ikvm Reference项包含,但在foo.jarReferences数据上指定bar.jar的身份。
Debug 可选值表示如何生成调试符号。默认情况下,这是根据项目的<DebugType>属性确定的。目前仅支持完整的调试符号。
Aliases 半彩色分离的别名列表,可用于引用References中的组件。
ClassLoader 自定义classloader实现的完全合格的类名称,以用作委托父母。示例包括ikvm .runtime.AppDomainAssemblyClassLoaderikvm .runtime.ClassPathAssemblyClassLoader
Reference MSBuild项目组定义上支持的所有其他元数据。

ikvm Reference不是传递的。将其包括在一个项目中并从第二个项目中增加该项目的依赖性不会导致第二个项目中的相同参考。而是将参考添加到每个项目。

对于每个项目,可以解决相同的组装,请确保其设置相同。

可以将多个ikvm Reference条目配置为相互包括为参考。

ikvmReference Include="helloworld.jar">
<AssemblyVersion>1.0.0.0</AssemblyVersion>
</ ikvm Reference>
< ikvm Reference Include="helloworld-2.jar">
<AssemblyName>helloworld-2</AssemblyName>
<AssemblyVersion>2.0.0.0</AssemblyVersion>
<References>helloworld.jar</References>
<Aliases>helloworld2</Aliases>
</ ikvm Reference>
</ItemGroup>\”>

< ItemGroup >
   < ikvm Reference Include = \" helloworld.jar \" >
      < AssemblyVersion >1.0.0.0</ AssemblyVersion >
   </ ikvm Reference >
   < ikvm Reference Include = \" helloworld-2.jar \" >
      < AssemblyName >helloworld-2</ AssemblyName >
      < AssemblyVersion >2.0.0.0</ AssemblyVersion >
      < References >helloworld.jar</ References >
      < Aliases >helloworld2</ Aliases >
   </ ikvm Reference >
</ ItemGroup >

Automatic-Module-Name规范

Automatic-Module-Name是JAR清单的指定属性,可以在JAR内的META-INF/MANIFEST.MF文件中找到,或者基于JAR文件的名称生成的值。有关更多信息,请参见文档。

MavenReference

有关使用说明,请参见ikvm -Maven Readme。

通知项目所有者

ikvm项目建议,除非您是该软件的原始所有者,并且有令人信服的原因,否则人们不要将与ikvm一起编写的ikvm库Java库。

创建FOSS Java库的副本,并将其发布到分发机制(例如Nuget.org)上,从而在下游产生了生态系统混乱和依赖性冲突。我们提供了一个系统,以便Java库的.NET用户可以将这些库直接引用到标准Java生态系统机制:Maven Central等,但虽然ikvm .Maven。请记住,真空中很少有图书馆。图书馆通常取决于其他数十个库。两个无关的Java库通常取决于同一基础Java库。依赖冲突解决方案和版本统一的一种复杂的方法必须参与为任何个人下游项目解决此层次结构。您可能会向您的版本用户介绍重复的类,或者使用户依赖其他库的错误版本。

除上述内容外,我们目前不认为静态编译的组件与ikvm .Java和ikvm .runtime库之间的API保持稳定。即使在补丁级别上,也不会针对更高版本的ikvm构建的静态编译的组装,这也不是与更高版本的ikvm相对的。我们想在将来对此做出更好的支持,但是目前, ikvm .runtime和ikvm .Java .Java Apis计划了很多工作,我们不想抑制。由于我们还提供构建工具,使从构建机器中重新编译组件的过程变得容易,如果遵循建议,这应该有限。

此建议有例外,例如图书馆未发布给Maven。在这种情况下,指导是提倡原始的Java库实际上出版给Maven,或者自己做工作,因为这是Java库的合适地方。

我们不能强迫您遵守此建议。但是对于生态系统的健康,我们敦促您自己考虑。

下载源码

通过命令行克隆项目:

git clone https://github.com/ikvmnet/ikvm.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 ikvm https://www.zuozi.net/34371.html

amper
上一篇: amper
ea async
下一篇: ea async
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务