使用SBT的多版本构建
我想实现以下内置SBT:使用SBT的多版本构建,sbt,Sbt,我想实现以下内置SBT: 有多个scala版本的 具有多个目标版本(由于库依赖关系) 让我们以1.0、2.0、3.0版和Scala 2.92、2.10.2版中存在的外部库为例,我希望编译、组装和发布: MyProject_外部IB1.0_scala_2.9.2 MyProject_外部IB1.0_scala_2.10.2 MyProject_外部IB2.0_scala_2.9.2 MyProject_外部IB2.0_scala_2.10.2 MyProject_外部IB3.0_scala_
- 有多个scala版本的
- 具有多个目标版本(由于库依赖关系)
- MyProject_外部IB1.0_scala_2.9.2
- MyProject_外部IB1.0_scala_2.10.2
- MyProject_外部IB2.0_scala_2.9.2
- MyProject_外部IB2.0_scala_2.10.2
- MyProject_外部IB3.0_scala_2.9.2
- MyProject_外部IB3.0_scala_2.10.2
scalaVersion := "2.10.2"
crossScalaVersions := Seq("2.10.2", "2.9.2")
根据sbt的命名约定,您发布的工件将具有二进制版本的后期修复,对于Scala 2.10.x是_2.10
,对于Scala 2.9.2是_2.9.2
。这是为了利用2.10系列之间的二进制兼容性。您可以使用crossVersion
来控制该特性
与外部图书馆的交叉建筑
与外部库的交叉构建有点棘手。我能想到的最隐秘的情况是。在那里,我创建了一个名为dispatchVersion
的自定义设置:
lazy val dispatchVersion = SettingKey[String]("x-dispatch-version")
这在buildSettings
中设置为
dispatchVersion := "0.10.1"
而我的版本前缀为dispatch0.10.0\
:
version <<= dispatchVersion { dv => "dispatch" + dv + "_0.1.0" }
除了制作一个自定义插件,没有简单的方法可以迭代一系列外部版本。您可以编写如下shell脚本:
sbt "set externalLibVersion := \"1.0\"" +assembly "set externalLibVersion := \"2.0\"" +assembly "set externalLibVersion := \"3.0\"" +assembly
externalLib
本身是一个scala库,它是针对2.9.2和2.10.2交叉发布的吗?或者它是一个简单的java库?有没有办法为不同的子项目设置不同的sbt版本?@Alex你应该打开一个单独的问题,而不是在评论中问我。
libraryDependencies <++= (externalLibVersion) { (el) => Seq(
"org.apache" % "foo" % el,
"org.apache" % "foo-extention" % el
)}
sbt "set externalLibVersion := \"1.0\"" +assembly "set externalLibVersion := \"2.0\"" +assembly "set externalLibVersion := \"3.0\"" +assembly