實習到如今所須要的工具類給的都是jar包,可是我須要在.net環境下去實現,若是從新下的話回合那麻煩,所以若是能將c#可以調用jar那就太棒了java
IKVMC能夠將jar轉成dll,到如今爲止已經成功轉換3個jar爲dll,期間碰壁無數,在此寫下此篇文章但願能幫助到有須要的人。c#
這並無什麼很大問題,下載壓縮包解壓出來,解壓出來的主要文件在bin目錄下
工具
在win8.1/win10下的步驟以下:spa
C:\ikvmc-XXX\bin\;
_cmd
,輸入ikvmc
查看幫助輸出如圖所示,則準備工做已經完成.net
-target:library
使用方法:ikvmc -target:library a.jar
命令行
因爲咱們的目的是把jar轉爲dll,此參數就是此做用3d
-reference:<filespec>(-r:<filespec>)
使用方法: ikvmc -target:library a.jar -r:b.dll
code
該方法做用若a.jar存在第三方的引用,則咱們須要指明須要引用的dllhtm
注意:大多實際狀況其實會很複雜,其實轉換一個jar包,並非一句代碼就能夠轉換的,大多數的jar包會調用不少其餘的包,這就須要作不少工做
我在這裏舉個實際例子
首先了解下項目的大體結構
這裏有不少依賴項,可是真正須要的包爲圈出來的三個
因此咱們先嚐試將這三個包轉化爲dll,最後在轉化這個包並指明須要引入的dll
嘗試轉換爲dll
cd 進入到我文件目錄,使用ikvmc -target:library xxx.jar
命令轉換爲dll
若是你並無ikvmc使用的經驗那麼,接下來的狀況可能會讓人無語
此圖的意思是有些類沒找到,有些類引用錯誤等
這幅圖看到不用怕,並非什麼錯誤,而是一些警告,他說:兄弟 你編譯的這些東西我都已經集成了在XXX中了,因此仍是會轉化成功
這幅圖和第一個轉化的結果同樣許多class沒引用,不少引用錯誤
以上的錯誤解決方法就是:指明須要引用的'包'(實際是dll)
看不懂什麼意思?也就是說:嘿,我不知道你引用的是什麼,你須要先把他轉化成dll,而後再引用這些dll,我才能認識他們
ikvmc -target:library xxx.jar -r:xxx.dll
添加引用便可再處理以上問題你所花的時間我相信會佔用整個處理過程大部分時間,不要以爲煩,一般狀況,你並非把整個項目轉化爲.net項目,而是某些功能須要調用java的代碼,因此狀況不會太悲觀
這是我導出的jar包,注意下導出的時候無需勾選libs下的依賴jar包,咱們經過將依賴jar包轉化爲dll,顯示的指定,因此無需一塊兒導出
最後經過ikvmc -target:library xx.jar -r:xx.dll
進行轉化,轉化成功的如圖所示,未彈出任何錯誤以及警告,若彈出了錯誤和警告dll依然會生成可是你在.net調用可能會報錯
最後須要提很是重要的一點,有些人什麼都喜歡用新的東西(好比我),可是ikvmc彷佛不支持過高版本編譯出的jar包(如1.8),若是一切都已經作很到位,可是仍是導出dll失敗,能夠嘗試下降java編譯器的版本
但願此篇文章能給和我同樣走過坑的人一點幫助
裏面會有個 ikvm 的文件夾
其中 bin 下的 ikvm 就是須要用的程序, 能夠先配置環境變量, 方便使用
首先編譯 java 爲 .class 文件
而後打包成 .jar
在 cmd 中輸入 ikvmc -target:library -out:A.dll A.jar
其中 A.dll 就是生成後的
參數:
-reference 須要用到的其餘依賴的 dll 例子是 -reference:path/*.dll
-target 目標想轉換成的格式 有 library(dll) 和 exe 等
-out 輸入爲何文件