SBT: 动态检测构建平台

4

我正在尝试根据不同平台(Windows或Linux)动态更改项目中使用的JAR依赖项的引用。

所以,这是一个非常简单的场景,

我该如何在build.sbt中实现这个简单的检查?


2
这样的东西有帮助吗:https://dev59.com/VnVC5IYBdhLWcg3woSxW - James Whiteley
看起来这是我需要的代码,只需在构建时执行它,让我试试,谢谢!!! - Pavel
1个回答

5
潜在的方法是在类似自定义设置这样的地方,通过对System.getProperty("os.name")进行模式匹配来实现。
val configureDependencyByPlatform = settingKey[ModuleID]("Dynamically change reference to the jars dependency depending on the platform")
configureDependencyByPlatform := {
  System.getProperty("os.name").toLowerCase match {
    case mac if mac.contains("mac")  => "org.example" %% "somelib-mac" % "1.0.0"
    case win if win.contains("win") => "org.example" %% "somelib-win" % "1.0.0"
    case linux if linux.contains("linux") => "org.example" %% "somelib-linux" % "1.0.0"
    case osName => throw new RuntimeException(s"Unknown operating system $osName")
  }
}

然后将评估后的设置添加到libraryDependencies中,如下所示。
libraryDependencies ++= Seq(
  configureDependencyByPlatform.value,
  "org.scalatest" %% "scalatest" % "3.0.5",
  ...
)

  1. 在git子模块的范围内,有类似的东西可以使用吗?因为我需要在本地(Windows)和构建服务器(Linux)上解析项目的两个不同版本,我已经有了sbt多项目等工具。
  2. 这种build.sbt方法看起来很不错,我希望能在项目中使用它,但到目前为止,我实际上使用的是 build in -> unmanagedJars(https://www.scala-sbt.org/1.x/docs/Library-Dependencies.html),这样可以很好地解决我需要的位置。
- Pavel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接