將java庫轉換為.net庫

weixin_34391854發表於2010-12-23

動機: 充分利用java陣營眾多的類庫 工具: IKVM――把java bytecode 轉換成IL程式,並提供大部分J2SE 1.4類的.net實現(IKVM.GNU.Classpath.dll) winrar――提取jar,打包jar Java IDE(可選)――閱讀原始碼,瀏覽類之間的關係,我用的是eclipse 反編譯工具(可選)――沒原始碼時用,主要也是瀏覽類與類之間的關係,java反編譯我用的是DJ Java Decompiler,.net用Reflector。 原理: java也好,.net也好,其執行無非就是執行時 + 庫,把java彙編指令一條一條轉換為IL彙編指令,就可以實現java程式到.net程式的轉換――你可以通過最純正的.net使用方式來使用這些類庫/程式。ikvm實現的就是這樣一個功能。 如果一個java程式呼叫一大堆java類庫,那麼必須把這些程式和類庫全部轉換成.net的IL格式,這個程式才能執行。 IKVM安裝: 從www.ikvm.net上下載ikvm,解壓縮後就能開始用。 將jar轉換為dll: 執行:ikvmc -target:library ××××.jar 會將jar檔案自動轉換為 ××××.dll 但是,如果jar中引用的類不存在於××××.jar,也不存在於IKVM.GNU.Classpath.dll之中,則會給出警告資訊,該類也不會轉換。這時,需要引用缺少的類所在的dll,格式如下: ikvmc -target:library -reference:lib1.dll -reference:lib2.dll -reference:lib3.dll jar1.jar jar的提取: jar可以用winrar開啟,把你想要的目錄或類解壓縮。 把java class檔案打包為jar: 把目錄壓縮成zip格式,把字尾改成jar,OK。 例子:轉換Geotools的main模組 下面以Geotools的main模組為例,說明怎樣將jar檔案轉換為IL檔案。 geotools是有10年曆史的GIS中介軟體。其main模組有1000多個類,原始碼檔案大小合計9.74M。jar檔名為gt2-main.jar,2.34M. 步驟1:分析main模組依賴的類庫,分析類庫間的依賴關係 geotools-main依賴的類庫有: rt.jar――java的主要的lib geoapi.jar――OpenGIS一幫人定義的標準geoapi jai_codec.jar, jai_core.jar,――Java 2D API JTS-1.4.jar,――Java 拓撲套件,主要用於拓撲分析,可能依賴 vecmath-1.3.jar――vector數學庫 xalan-2.5.1.jar――xml 轉換lib opengis-legacy-0.1.jar,――忘了幹什麼的,反正和gis有關 units-0.01.jar――不知道是什麼 batik*.jar――SVG lib mailapi-1.3.jar 步驟2:轉換類庫 先轉換那些沒依賴的庫,比如vecmath-1.3.jar,...... 執行: ikvmc -target:library vecmath-1.3.jar 結果: Note: output file is "vecmath-1.3.dll" Note: automatically adding reference to "f:\ikvm-0.20.0.0\ikvm\bin\ikvm.gnu.classpath.dll" 成功轉換成vecmath-1.3.dll。 如果碰上了依賴的庫沒轉換,比如執行: ikvmc -target:library jai_codec.jar 結果提示有些類找不到: Note: output file is "jai_codec.dll" Note: automatically adding reference to "f:\ikvm-0.20.0.0\ikvm\bin\ikvm.gnu.classpath.dll" Warning: class "com.sun.image.codec.jpeg.JPEGCodec" not found Warning: class "com.sun.image.codec.jpeg.JPEGEncodeParam" not found Warning: class "com.sun.image.codec.jpeg.JPEGImageEncoder" not found Warning: class "com.sun.image.codec.jpeg.JPEGDecodeParam" not found Warning: class "com.sun.image.codec.jpeg.JPEGImageDecoder" not found Warning: class "com.sun.image.codec.jpeg.ImageFormatException" not found Warning: class "com.sun.image.codec.jpeg.JPEGQTable" not found Warning: class "sun.security.action.GetPropertyAction" not found 因此對於有依賴關係的庫,需要從最下面那個,大家都依靠它的那個庫轉換起。在這裡就是rt.jar。 from: http://hi.baidu.com/ecgql/blog/item/f2bde21fefa6000c314e1563.html

如鵬網.Net培訓班正在報名,有網路的地方就可以參加如鵬網的學習,學完就能高薪就業,點選此處瞭解

 

    三年前只要懂“三層架構”就可以說“精通分層架構”;現在則需要懂IOC(AutoFac等)、CodeFirst、lambda、DTO等才值錢;

    三年前只要會SQLServer就可以說自己“精通資料庫開發”;現在則需還需要掌握MySQL等開源資料庫才能說是“.Net開源”時代的程式設計師;

    三年前只要會進行使用者上傳內容的安全性處理即可;現在則需要熟悉雲端儲存、CDN等才能在雲端計算時代遊刃有餘;

    三年前只要掌握Lucene.Net就會說自己“熟悉站內搜尋引擎開發”;現在大家都用ElasticSearch了,你還用Lucene.Net就太老土了;

    三年前發郵件還是用SmtpClient;現在做大型網站發郵件必須用雲郵件引擎;

    三年前快取就是Context.Cache;現在則是Redis、Memcached的天下;

    如鵬網再次引領.Net社群技術潮流!點選此處瞭解如鵬網.Net最新課程

相關文章