2012-07-19 117 views
2

我試圖從scala-class中創建一個Dll。我正在使用IntelliJ和SBT。我已經找到了一種使用ikvm轉換器將.jar文件轉換爲Dll的方法。現在的問題是:當我使用SBT下的「package」創建一個.jar文件出我的.scala文件並嘗試將它與ikvmc轉換爲一個Dll時,生成的庫在C#中集成時爲空...將Scala庫轉換爲DLL(.NET)

例如,轉換Jama-Library(用Java編寫)工作正常,在那裏轉換Scama(用Scala編寫)不起作用。

有沒有辦法將scala代碼轉換成d​​ll?有沒有「Scala to Java」轉換工具?

最好的問候, 克里斯托夫

+0

你是否也將scala運行時jar包含在轉換中?請顯示您的ikvmc命令行。 – 2012-07-19 07:57:02

+0

Scala編譯爲Java字節碼,所以沒有理由說明Scala本身會給IKVMC帶來一些問題。當你編譯Scala時,你會得到一個Java類。看起來問題在於,Scama API沒有通過IKVM轉換時可以從C#訪問的可見性規則 – Edmondo1984 2012-07-19 07:58:17

+0

ikvmc -target:library jama-1.0.2.jar – user1537137 2012-07-19 08:06:06

回答

2

我沒有.NET的知識,而是從SK-邏輯的和您的意見對問題判斷:sbt package包括Scala的運行時庫,因爲它假定你是將您的項目導出爲其他Scala項目中使用的庫。

因此,您將需要創建一個包含運行時的「胖」jar。例如,在this blog中,您可以看到作者如何通過轉換項目jar和運行時jar來創建完全自包含的可執行文件。

有不同的工具可以做到這一點與sbt。最容易的是sbt-assembly,但是最終會得到一個非常大的文件,因爲它只是增加了整個運行時間。如果這是一個問題,您可能需要使用proguard plugin來過濾運行時間。有關此主題的更多信息,請參閱another StackOverflow entry

+2

不一定是一個脂肪罐,你可以同時處理多個罐子(這是推薦使用ikvmc的方法)。 – 2012-07-19 12:11:55