基于.NET的Java虚拟机IKVM介绍 ??? ?IKVM的定位是基于.NET CLR的Java虚拟机。 ?这是一个开源的项目,主页地址:IKVM 基于.NET的Java虚拟机意味着什么? 更难能可贵的是,IKVM同时支持微软的.NET Framework 和 Mono。 IKVM现在可以提供对JDK 1.4很好的支持。 IKVM目前不成熟的地方在以下几个方面: 1 对AWT和Swing没有提供支持,在IKVM的开发计划中,这项优先级别不高。 一般来说我们可以在一下3种情况下使用IKVM: 1 直接在IKVM下运行Java程序,比如: ????????????? ikvm -jar myapp.jar<? 一些和IKVM项目相关的资料: MonoDevelop: A Mono IDE with IKVM Support GNU Classpath: The Free Java Library Project
这就是今天我们要引入的主角 IKVM.NET , IKVM.NET 项目的历史非常悠久,早在2006 年我在博客上写了一篇文章 《在.NET平台上运行Java程序-IKVM.NET入门》[1], IKVM.NET 2017年IKVM.NET作者决定放弃IKVM.NET的开发工作,从此之后社区里有人分叉了IKVM.NET 并继续工作,虽然开发工作不是很积极, 不过从2022年3月份至今开发就非常活跃了(https: //github.com/ikvm-revived/ikvm)[2],现在完全可以支持.NET 6了: IKVM.NET 包括以下三个主要组件: 在.NET中实现的Java虚拟机:它有一个使用C#. IKVM.NET 对于各种软件开发方案非常有用。以下是一些可能性的样本。 插入式 JVM 发行版中包含的 IKVM 应用程序是 Java 虚拟机的 .NET 实现。 /ikvm [3]OpenJDK: http://openjdk.java.net/ [4]IkvmReference 设计方案:https://github.com/ikvm-revived/ikvm
注意:这里的GNU Classpath不是IKVM.NET的一部分,但是前者被用在IK.VM.NET中。 * IKVM.JNI. 打开命令或者shell窗口,cd进入ikvm\bin目录,执行ikvm。如果我们操作正确的话,我们将看到以下的输出: usage: ikvm [-options] <class> [args...] 为了方便使用,我们可将ikvm\bin目录加入到系统path。现在我们将使用IKVM就像使用JVM一样,并不需要配置。 我们至少要安装IKVM.GNU.Classpath.dll和IKVM.Runtime.dll。 运行此类: ikvm Hello 这个命令将启动IKVM,IKVM查找名为Hello.class的文件。
本文将介绍一种通过IKVM实现的对接方案,IKVM是一个将Java字节码转换为.NET程序集的工具,可以让.NET程序直接调用Java代码。 我们将结合实例代码,探讨如何在.NET Core项目中使用IKVM对接Java,从而实现Java库的复用。什么是IKVM?IKVM是一个开源的Java和.NET互操作工具包。 准备工作在使用IKVM进行开发之前,我们需要完成一些基本的环境准备工作:安装IKVM工具:下载适用于.NET的IKVM工具包(请注意,最新的IKVM可能不完全支持.NET Core,如果遇到兼容性问题, 步骤2:使用IKVM将Java字节码转换为.NET程序集IKVM提供了ikvmc工具,可以将Java类库转换成.NET程序集。 性能问题:由于IKVM进行字节码到IL的转换,性能可能会有所下降。如果遇到性能瓶颈,可以考虑只对少量关键性Java代码进行转换,或者对IKVM进行二次开发以优化性能。
正文: 一、所需工具 (1)ikvm(下载地址:http://www.ikvm.net/) (2)eclipse 二、具体步骤 1、在eclipse编写java程序 package com.itwolf ; } } 2、右击java工程-export-JAR file 3、解压第一步中下载的ikvmbin到任意目录 4、添加Path环境变量 变量值为ikvm的bin目录 5、jar文件放在指定目录如 E盘下,然后cmd中输入下列命令,将jar文件转换成dll文件 ikvmc -out:E:\Test.dll E:\Test.jar 6、新建C#项目,将ikvm解压出来的文件路径的bin目录下的3个DLL 控件IKVM.OpenJDK.Core.dll ,IKVM.Runtime.dll ,IKVM.Runtime.JNI.dll 添加引用到C#项目中。
Mono特别支持C#、Java、以及Basic,其中对Java的支持是通过IKVM。IKVM是一个在架构在Mono/.NET上的JVM。 有了IKVM,许多Java程序就可以和Mono程序同时运行,甚至相互沟通。 看了上述的介绍,你应该能够体会到Mono现在的确是发展得相当不错。 第八章介绍一些琐碎的主题,包括如何利用自动化的工具、如何写出跨平台的程序、如何使用IKVM、如何使用Basic。 这本书问世已经一年多了,由于Mono进步得很快,所以本书有一小部分的信息已经过时。
Jeroen's IKVM (Java on .NET). Microsoft's IronRuby. Phalanger (PHP on CLI). Jeroen's IKVM (Java on .NET). Microsoft's IronRuby. Phalanger (PHP on CLI).
C#解析PDF文件常用的库有PDFBox和iTextSharp,PDFBox为Java库,通过IKVM使用,因此调用方法、属性等比较变扭。
为了让Java能够跨进.NET的世界,有人设计了.NET VM上的Java VM,“IKVM.NET”正是这样的一套Java VM。 仗着Java VM和.NET VM有许多相似之处,IKVM.NET在设计上就可以取巧,许多机制(例如垃圾收集)直接利用底下的.NET VM,不需要自己完成。 有了像IKVM.NET这样的VM,Java就可以跨到.NET平台上,不失为一个扩展势力的好方法。 为了抢夺市场,Java和.NET阵营均使出浑身解数。Java阵营近来的脚步似乎加快了,这是好现象。
New C# Compiler backend (can now use any custom mscorlib) 新的C#后台编译器,基于 IKVM.Reflection API ,允许开发者引用第三方的 下一版本的mono,batch compilers (gmcs, smcs与dmcs)将全部切换至IKVM.Reflection。
我看到了所有有希望的事情,但是最令我记忆犹新的是 GCJ(The GNU Compiler for Java)、Avian 和 IKVM + Mono。 到目前为止,我对另一种工具链的最佳体验是 IKVM+Mono。IKVM 是一个 Java 到 DotNet 的编译器,而 Mono 是 DotNet 的开源、跨平台版本。 我能够将我的 Swing 代码剔除,并生成一个只有我的应用的业务逻辑的 jar,然后使用 IKVM 将其转换为一个 .dll 文件。
华硕高性能系列系统中,在配置两块CPU机种的服务器(ESC4000系列、ESC8000系列)、工作站(ESC2000系列、TS700-E8-RS8)内置支持iKVM功能的BMC(Baseboard management
其中包括虚拟化工具,如基于内核的虚拟机 ( KVM ) IKVM 和 Oracle 的开源 VirtualBox。项目之间的相互依存关系解决的比较好。
Anders Hejlsberg宣布微软将开源Roslyn C#编译器,Mono项目团队正忙于将Roslyn集成进入Mono的技术堆栈(Mono.Cecil NRefactory IKVM.Reflection
> 3.1.2 nuget FSharp.Formatting nuget Nuget.CommandLine nuget FAKE nuget SourceLink.Fake nuget IKVM
双击codeMan.exe,众所周知,java做成exe程序很麻烦,在这里我是利用了.net的ikvm插件把jar包直接编译成了exe程序,这个启动界面会连接我的服务器,去检查版本更新,如果有更新就会在远程服务器下载最新的配置文件到本地的
TS700-E9-RS8 提供 iKVM 模块支持远程 BIOS 更新、风扇控制、独立 KVM、影片录制及 BSOD 撷取,通过兼容于所有主流浏览器的人性化网页式图形界面提供全时远程监控与诊断,即使操作系统故障或脱机也不成问题
C#有强大的IDE支持 lua的话有个lua2il的东西 Java的话Mono里有个IKVM估计就是支持它的 至此, C#做为脚本已经完全可行了: 可嵌入, 跨平台, 高效率, 热更新, 几乎可以忽略的编译时间
然后,攻击者可以通过合法的 iKVM 远程控制 BMC 功能访问服务器的操作系统,或者用恶意固件闪烁目标系统的 UEFI,从而实现对主机操作系统的持久控制。
C#有强大的IDE支持 lua的话有个lua2il的东西 Java的话Mono里有个IKVM估计就是支持它的 至此, C#做为脚本已经完全可行了: 可嵌入, 跨平台, 高效率, 热更新, 几乎可以忽略的编译时间