由於合作方使用.net編程,jar包不能用,需要轉換成dll格式,來回轉換了十幾個dll文件(心塞。。),終於生成了一個可用的。在這里將走過的彎彎繞繞總結下,希望遇到相似問題的同好們,能走得順利些。
版本問題:
由於現在java的jre都是用的1.8以上版本,所對應ikvm應該是8版本。而網上大多數教程都適用於jre1.7版本,即ikvm下載版本是7的,以此類推。查了幾天的資料,沒有符合要求的,就連stackoverflow上面都有很多遺留問題,無人回答,這也形成我寫這篇文章的動力。。。
准備工作:
ikvm.net 8.1版本轉換工具下載地址:
http://weblog.ikvm.net/2015/08/26/IKVMNET81ReleaseCandidate0.aspx
下載后解壓,並設置系統 > 高級系統設置 > 環境變量 > 系統變量path:添加ikvm中bin文件路徑
轉換步驟:
一定要在一個非default包下建立java文件,例如新建school包,里面java文件第一行是package school;
無依賴jar:
在寫好的java目錄中,ftp輸入cmd打開命令窗口(或者按住shift再右鍵->在此處打開命令窗口)
javac XXX.java進行編譯
ikvm XXX.class生成dll文件
# 這里可能和網上說的不大一樣,可能是ikvm升級成8的原因,普遍方法都試了,轉出來的dll沒一個能用的。。
有依賴jar:
# 我寫的沒有依賴第三方jar,因此這個沒有具體試,但極力推薦以下兩種辦法
1. 先試試上面的那個
2. 先把所依賴的jar包用以下命令轉換成dll:ikvmc -out:XXXX.dll XXX.jar
再用如下命令轉換目標jar文件,可以有多個-reference(可以用-r代替)
ikvmc -target:library -reference:depend1.dll –reference:depend2.dll xx.jar
!注:轉換dll時任何一個error或warning都算轉換失敗
使用步驟:
!注:java文件必須在一個特定的package XXX中,所有需要調用的方法都顯示聲明public,才可以調用!使用時,using XXX;
因為是用ikvm轉換的,所以還要調用以下幾個dll文件(這里用的是ikvm8)
IKVM.Runtime.JNI.dll
IKVM.Runtime.dll
IKVM.OpenJDK.Core.dll
這些文件都可以在ikvm\bin文件夾中找到。
再using school;(本例中)
然后就可以正常調用類中方法,和在java中調同一包下不同類方法相同。
祝一切順利~
