2014-08-27 84 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