bet体育在线网址手机版每当.NET平台达成运行Java程序-IKVM.NET入门

By admin in bet体育在线网址手机版 on 2018年11月14日

  

一、介绍

泰戈尔的岸上,如此吸引着我之秋波:“好把船只一排儿系在竹竿上;人们以晨趁船过那边去,肩上扛在犁头,去耕耘他们之天涯的田;在那里,牧人赶在他俩叫着的牛游泳到河旁的牧场去……雨过去了,一浩大一众多的野鹜飞到那边去。茂盛的芦苇以岸边四周生长,水鸟在那边生蛋;竹鸡带着跳舞的漏洞,将它细小的够印印在窗明几净的软泥上;黄昏之当儿,长草顶在白花,邀月独自在长草的波浪上漂。”

IKVM.NET是一个对Mono同微软.net框架的java实现,其计划目的是于.NET平台及运行java程序。它包含了以下的组装:
* 一个用.NET实现的java虚拟机
* 一个java类库的.NET实现
* 致力为以java和.NET之间彼此的家伙

本身之户外似乎便是生生机勃勃芳香清新的沿,泰戈尔的岸上,也是自之对岸。

二、IKVM.NET的组件

而是自身无敢立起身仔细地为室外看,每天上班下班,走过无数不成的那些街巷见了不少转头之那些楼房车流都唤醒自己,要在妻子想方您的滨。我是如此地欣赏自的沿,好多想起邀请熟悉的人来探自家的彼岸,不过我或者没将说出去,周围的食指另行愿意讨论余额宝沪港通基金期货房地产,贸然开口说自家之沿,恐怕会打扰人家的霸道。

IKVM.NET包含以下的局部:
* IKVM.Runtime.dll: VM运行时跟拥有支持代码。它包括以下的效用:
   Byte Code JIT 编译器和验证器: 使用JIT将Java Byte
Code编译为CIL(C中间语言)。
   对象模式映射结构:
将.NET中之System.Object,System.String,System.Exception映射为java代码中的java.lang.Object,
java.lang.String,java.lang.Throwable。
   管理当地方法(在Classpath中)的.NET重新实现。
* IKVM.GNU.Classpath.dll: 被编译的GNU
Classpath版本,它是出于自由软件基金会兑现之java类库和局部IKVM.NET附加代码组成的。注意:这里的GNU
Classpath不是IKVM.NET的平等片段,但是前者被用当IK.VM.NET中。
* IKVM.JNI.[Mono|CLR-Win32].dll:
通过实现JNI接口管理C++汇编。作为一个可选部分,只当次采取自己之地头库时才为用到。而对于纯java程序来讲是未会见于用到的。
* ikvm.exe: 与java.exe很相近的开行推行顺序(动态模式)。
* ikvmc.exe:
静态编译器,被用来编译java类和jar使该变成.NET汇编(静态模式)。
* ikvmstub.exe:
一个从.NET汇编生成存根类的工具,就如javap一样反编译.NET汇编。IKVM.NET了解怎么存根并为此实际的.NET类型引用替换对存根的援。
* IKVM.AWT.WinForms.dll: 非常少的零散AWT实现。

岸的风物最好美了,泰戈尔说,“我拿毫无像爸爸那么,离开而及城里去工作。”

仲、项目状态

自我之窗子外,大家都想到再老的城里做重新怪之行,大家都想养好的子女去再远之城里做重新好之从事。连本人,也想在给我之男女好好学习,以便将来发一样天呢错过一个城里。孩子不亮,我明确说在对岸美,却使恪尽送他错过城里,妈妈怎么这样自相矛盾吗?

此路即在开,将最大化实现和JDK1.4的配合,但是按照在部分漏洞(尤其以Classpth
API中)。
* AWT和Swing还未生效果。
*
安全性是IKVM平台的一个不胜遗漏。此题材拿依靠.NET平台供的本来面目片、但功能强大的安全模式要于解决。
虽然这么,目前色曾具能够成运行大型java项目的能力。

自家一度经常从相矛盾了。明明喜欢慢的,有时候也去计算怎样更快;明明喜欢静的,有时候还要等到在凑合个热闹;明明喜欢简单的,有时候还要支持一些个复杂;明明凡是劳动的,有时候甚至露出快乐的乐。

三、IKVM原理

自身欢喜自之滨,看到它们,那些矛盾都萎顿了。

1.怎样替换JVM
IKVM应用包含了采用.NET实现之java虚拟机。在部分场所,我们可用它替换掉java。例如:
java -jar myapp.jar 将让轮换为 ikvm -jar myapp.jar。

本人为并无讨厌我的窗户外,世事变迁,道法自然。我只是想,窗外始终能留有同一片小的土地,能够容许我的沿,其实是泰戈尔的岸上在那边生长;我只是希望,如织的人流里,有一部分口许泰工尔的对岸落进他们的心田。

2.每当.NET应用中采取java类库
IKVM.NET包含ikvmc,这个以java
bytecode与.NET中间语言的转换器。如果我们利用一个让用当.NET平台的java库的话,
运行ikvmc –target:library
mylib.jar(mylib.jar在此处代表我们的jar文件)来生成mylib.dll。例如apache
FOP项目是一个开源的XSL-FO处理器项目,它用java语言编写的用来自xml生成PDF文档。使用IKVM.NET技术,我们可拿apache
FOP用当任何的.NET应用中。这样于开发.NET应用的而以IKVM便足以行使java开源路是免费的软件仓库。尽管当IKVM.NET没有供在.NET中采取的java编译器,但是我们可用开源之Jikes编译器将java源代码编译为JVM
bytecode,然后使ikvmc –target:exe
myapp.jar来生产.NET执行文书。我们还可由此包含ikvmstub应用的道于咱们的java代码中用.NET
API。

季、IKVM使用入门

1.系统准备
Windows平台:Microsoft .NET Framework 1.1 SDK
Windows或者Linux平台:Mono Framework 1.0

2.开头设置
于Windows和Linux平台上设置过程是一致的,在下载二上前制发布版后,将文件解压缩。打开命令或者shell窗口,cd进入ikvm\bin目录,执行ikvm。如果我们操作无误吧,我们用张以下的输出:

usage: ikvm [-options] <class> [args...] (to execute a class) or ikvm -jar [-options] <jarfile> [args...]
 (to execute a jar file) ...

为了方便使用,我们只是将ikvm\bin目录在到系统path。现在我们拿使IKVM就如以JVM一样,并不需要配置。如果我们需要在.NET或者Mono环境下下IKVM,请密切看下面的文字说明:
* 首先下载Jikes编译器。如果我们计划出以java中开发代码
运行于.NET环境的讲话,我们将一个java编译器。IKVM.NET没有供者编译器,所以我们用能够充分成标准java类文件之编译器。Jlikes是一个好选择,它是一个漂亮之开源项目,并行使在又阳台。当然Sun提供的jdk也不行好。
* 在Windows的大局汇编缓冲区中安装IKVM dll。在Windows中运行基于IKVM
dll的.NET应用程序时,.NET框架必须稳定这些dll的位置。系统第一以大局汇编缓冲区中觅,然后还当前目录中觅。如果我们纪念不以当前目录中设置这些dll文件的语句,我们就要将它们安装于大局汇编缓冲区中:在Windows控制面板中访问.NET框架配置,增加一个汇编缓冲区。我们起码要安装IKVM.GNU.Classpath.dll和IKVM.Runtime.dll。

3.安装条件
于我们开修代码之前用未雨绸缪一下咱们的环境,添加以下途径到网PATH环境变量中:
* 包含IKVM执行文书的目录。
*
包含C#编译器(在Windows/Mono中为csc)的目录,通常在Windows中为C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322。
* 包含java编译器(javac或者jikes)的目录。

4.动态执行java应用程序
IKVM.NET包括了一个C#落实之java虚拟机。我们可从一个事例开始——进入IKVMROOT\samples\hello目录,编译示例程序:

Javac Hello jar cfm hello.jar manifest.mf Hello.class

如今,在应用javac编译了Hello类后,我们应用IKVM运行此类:

ikvm Hello 

是令将起动IKVM,IKVM查找名为Hello.class的文件。如果找到,则用那装载并动态执行bytecode。此时Hello程序将要求我们输入名字,之后咱们将看到一个问好信息。

倘当上头的经过遭到发出问题,请检查下的地方:
* 检查命令行: ikvm像java一样要我们输入是的类名。
*
如果ikvm报告ClassNotFoundException,请检查CLASSPATH环境变量是否受安装。如果让安装,请清除CLASSPATH或者以当前目录加入到CLASSPATH中坐要ikvm能够当当前目录中找到类似。

一旦运行jar文件,我们只是键入:

ikvm -jar hello.jar 

提醒:详细的吩咐行选项可以参考ikvm手册。

5.将java程序转换为.NET程序
IKVM.NET包含ikvmc这个会将jar文件转换为.NET的dll库文件及exe应用之家伙。下面我们将修怎样以java应用转换为一个.NET履文书:
进入IKVMROOT\samples\hello目录输入以下命令:

ikvmc hello.jar 

瞩目:当我们用Mono时,我们需要告诉ikvmc如何找到GNU Classpath
dll,例如:

ikvmc -reference:/usr/lib/IKVM.GNU.Classpath.dll hello.jar 

于命令执行完毕后,我们将发现hello.exe已于别于当前目录:
*
在Windows/.NET环境下,如果我们沾了FileNotFound的好,请记住检查.NET框架希望于当前目录或是全局汇编缓冲区中查找dll文件。我们可以通过地方讲的措施将dll安装及全局汇编缓冲区中,或者以dll文件一直复制到当前目录。
* 在Linux/Mono环境下,我们采用下的一声令下执行hello.exe:

mono hello.exe

6.在java中开发.NET应用
首先进入IKVMROOT\samples\usenetapi目录,找到ShowDir.java文件,这个java应用使用了.NET
API来展示当前目录下之文书列表。打开这个文件,我们见面发现该导入的包名以cli开头,这些连无是java
API包,它们是投到.NET命名空间的“伪”包。需要查阅更多信息要圈IKVM的开发者手册。

首先步:生成java存根文件
IKVM没有供java编译器,所以我们可下专业的java编译器。由于java编译器只能编译使用了java
API的应用程序,而非是使用.NET
API的运用。所以我们于此地用“愚弄”一下java编译器使该深信不疑名也cli.System.IO的保管是一个审的java包。帮助我们做到这项工作之是ikvmstub程序。它从.NET
dll生成jar文件,这个被转的jar文件包含了与.NET类对应之java类和接口,但是连无分包真正的代码,只包含有照信息。这样做就是会经过java编译器的自我批评以及编译:

ikvmstub mscorlib.dll

注意:在Linux Mono环境下,我们要输入dll文件的完好路径,例如:

ikvmstub /usr/lib/mscorlib.dll

于编译完成后,我们以在当前目录下发现一个称呼也mscorlib.jar的文本。

第二步:编译java源代码
现行咱们将编译java源代码,如果采取javac的语,可输入以下命令:
javac -classpath mscorlib.jar ShowDir.java

当命令就后,ShowDir.class文件拿应运而生当前目录下。

其三步:生成.NET执行文书
终极咱们用转换java class文件为.NET应用程序,正而前说的:ikvmc
ShowDir.class

专注:在Linux Mono环境下,我们需要利用前提到的-reference选项:

ikvmc -reference:/usr/lib/IKVM.GNU.Classpath.dll ShowDir.class

这会儿我们就是足以看来ShowDir.exe出现于当前目录。

五、参考资源:
http://www.ikvm.net/

原文地址:http://blog.matrix.org.cn/page/cleverpig/?anchor=%E5%9C%A8\_net%E5%B9%B3%E5%8F%B0%E4%B8%8A%E8%BF%90%E8%A1%8Cjava%E7%A8%8B%E5%BA%8F\_ikvm\_net%E5%85%A5%E9%97%A8

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 mobile.365-838.com 版权所有