2014-08-27 87 views
8

我正在開發一個需要加載本地庫的項目,到目前爲止,所有的開發都只限於Linux。爲了run我的項目,我可以簡單地使分叉和修改java.library.path如下:SBT:設置java.library.path的跨平臺方法?

javaOptions in run += "-Djava.library.path=some/common/path:lib/native/linux" 

我的問題是:我如何可以做同樣的在跨平臺的方式,讓我可以分享我的身材。與一個基於Windows的開發人員聊天。還有特別是我無法弄清楚迄今爲止三樣東西:

  • 我知道,SBT可以構建像"dir1"/"dir2"獨立於平臺的路徑,但我不知道的一個跨平臺的方式加入多個路徑(因爲它在Linux上是:,在Windows上是;)。
  • 是否可以附加依賴於平臺的lib/native/linuxlib/native/windows
  • 我上面的方法覆蓋java.library.path - 是否可以追加?

回答

5

既然你可以使用任何Scala代碼,當然你也可以做

val folderName = 
    if (System.getProperty("os.name").startsWith("Windows")) "windows" else "linux" 

val libPath = Seq("some/common/path", s"lib/native/$folderName").mkString(java.io.File.pathSeparator) 

javaOptions in run += s"-Djava.library.path=$libPath" 

雖然這不回答你的最後一個問題。

+0

這看起來不錯。我忘了提及我仍在使用SBT 0.12,一般來說,我希望有一個版本不可知的解決方案。但我認爲這個想法也適用於0.12。我仍然很難使用SBT的'/'語法,因爲沒有從String到(我猜)File的隱式轉換。但很明顯,總是會用'separatorChar'手動執行此操作。併爲了調試的目的:任何想法爲什麼show java-options總是返回List()? – bluenote10 2014-08-27 14:32:17

+0

是的,這應該在0.12中正常工作。除IIRC外,它使用Scala 2.9構建配置,所以字符串插值應該用'+'替換。對於最後一個問題,我不知道。也許問個別問題? – 2014-08-28 05:33:21

+2

什麼'System.getProperty(「java.library.path」)'並自己做連接? – 2014-08-28 19:32:30