亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

在.NET平臺上運行Java程序-IKVM.NET入門

瀏覽:3日期:2024-06-16 08:35:07
內容: 可以自由轉載, 轉載請保留下面的作者信息和鏈接:作者 cleverpig(http://blog.matrix.org.cn/page/cleverpig)摘要IKVM.NET是一個針對Mono和微軟.net框架的java實現,其設計目的是在.NET平臺上運行java程序。本文將比較詳細的介紹這個工具的原理、使用入門(如何java應用轉換為.NET應用、如何在java中開發.NET應用),希望能給大家帶來驚喜。對此的疑問和討論,請關注cleverpig的blog:http://blog.matrix.org.cn/page/cleverpig一、介紹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 SDKWindows或者Linux平臺:Mono Framework 1.02.開始安裝在Windows和Linux平臺上安裝過程是相同的,在下載二進制發布版后,將文件解壓縮。打開命令或者shell窗口,cd進入ikvmbin目錄,執行ikvm。如果我們操作正確的話,我們將看到以下的輸出:usage: ikvm [-options] [args...] (to execute a class) or ikvm -jar [-options] [args...] (to execute a jar file) ...為了方便使用,我們可將ikvmbin目錄加入到系統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:WINDOWSMicrosoft.NETFrameworkv1.1.4322。* 包含java編譯器(javac或者jikes)的目錄。4.動態執行java應用程序IKVM.NET包括了一個C#實現的java虛擬機。我們可以從一個例子開始——進入IKVMROOTsampleshello目錄,編譯示例程序: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執行文件:進入IKVMROOTsampleshello目錄輸入以下命令: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.exe6.在java中開發.NET應用首先進入IKVMROOTsamplesusenetapi目錄,找到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/ Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd 可以自?
標簽: Java
相關文章:
主站蜘蛛池模板: 99视频精品全国免费 | 日韩色在线观看 | 色在线播放 | 日韩版码免费福利视频 | 国产91精品在线播放 | 国产成人亚洲综合网站不卡 | 国产午夜在线观看视频 | 五月综合视频 | 永久免费不卡在线观看黄网站 | 1024免费 | 国产日韩欧美精品 | 青青青青青国产免费手机看视频 | 久久久久久久久久久96av | 国产免费不卡v片在线观看 国产免费不卡视频 | 黄短视频在线观看免费版 | 国产成人三级经典中文 | 直接看的毛片 | 青青伊人影院 | 国产成人亚洲日本精品 | 日韩欧美在线视频观看 | 九九精品国产兔费观看久久 | 国产成人99久久亚洲综合精品 | 999热在线精品观看全部 | 久草资源站在线 | 91精品国产免费网站 | 欧美亚洲在线视频 | 色中色在线视频 | 国产高清不卡码一区二区三区 | 精品视频一区二区 | 欧美另类一区 | 国产成人精品magnet | 国产精品久久福利网站 | 久久久国产精品免费看 | 麻豆精品密在线观看 | 1024国产视频 | 看黄色网址 | 的九一视频入口在线观看 | 92看片淫黄大片看国产片 | 国产三级黄色片 | 亚洲特级黄色片 | 麻豆回家视频区一区二 |