當前位置:編程學習大全網 - 源碼下載 - 在.NET上運行Java IKVM.NET入門

在.NET上運行Java IKVM.NET入門

  壹 介紹

 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 Win ] 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實現

  二 項目狀態

 此項目目前正在開發 將最大化實現與JDK 的兼容 但是仍存在壹些漏洞(尤其在Classpth API中)

 * AWT和Swing還未有功能

 * 安全性是IKVM平臺的壹個大遺漏 此問題將依靠 NET平臺提供的舊有的 但功能強大的安全模式而被解決 雖然這樣 目前項目已具備能成功運行大型java項目的能力

  三 IKVM原理

  如何替換JVM IKVM應用包含了采用 NET實現的java虛擬機 在壹些場合 我們可以用它替換掉java 例如 java jar myapp jar 將被替換為 ikvm jar myapp jar

  在 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使用入門

  系統準備Windows平臺 Microsoft NET Framework SDK Windows或者Linux平臺 Mono Framework

  開始安裝在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

  設置環境在我們開始編寫代碼之前需要準備壹下我們的環境 添加以下路徑到系統PATH環境變量中 * 包含IKVM執行文件的目錄

 * 包含C#編譯器(在Windows/Mono中為csc)的目錄 通常在Windows中為C \WINDOWS\Microsoft NET\Framework\v * 包含java編譯器(javac或者jikes)的目錄

  動態執行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手冊

  將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

  在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出現在當前目錄

lishixinzhi/Article/program/net/201311/11807

  • 上一篇:揉搓線的形態組合
  • 下一篇:求壹部小說 網遊類 說的是豬腳發現能把BOSS得武器打掉從而搶得極品裝備 有牛魔王
  • copyright 2024編程學習大全網