具有子模块和多个scala版本的sbt
我正在使用以下模块和依赖项构建scala应用程序:具有子模块和多个scala版本的sbt,scala,sbt,Scala,Sbt,我正在使用以下模块和依赖项构建scala应用程序: 共享库“公共” 模块“A”依赖于“common”,只能在scala 2.10中构建 模块“B”依赖于“common”,只能在scala 2.11+中构建 我试图在一个sbt构建中包含所有3个模块: import sbt._ import Keys._ lazy val root = (project in file(".")) .aggregate(common, A, B) lazy val commo
- 共享库“公共”
- 模块“A”依赖于“common”,只能在scala 2.10中构建
- 模块“B”依赖于“common”,只能在scala 2.11+中构建
import sbt._
import Keys._
lazy val root = (project in file("."))
.aggregate(common, A, B)
lazy val common = (project in file("common"))
lazy val A = (project in file("A"))
.dependsOn(common)
lazy val B = (project in file("B"))
.dependsOn(common)
我读过一些关于交叉缩放的文章,但是无论我在根构建中尝试什么组合,或者在公共构建中尝试什么组合,我都无法使它正常工作
有线索吗?
顺便说一句,我使用的是sbt 0.13.8。根据我的经验,如果您需要任何额外的环(如此要求),sbt多模块构建非常难以可靠地工作 您是否考虑过实现这一点的更简单方法:
- 发布您的公共依赖项(
如果您只需要自己访问它)sbt publish local
- 做两个项目A和B
- 将A和B导入作为依赖项共同使用
build.sbt
文件示例:
lazy val common = (project in file("common"))
.settings(crossScalaVersions := Seq("2.10.6", "2.11.8"))
lazy val A = (project in file("A"))
.settings(scalaVersion := "2.10.6")
.dependsOn(common)
lazy val B = (project in file("B"))
.settings(scalaVersion := "2.11.8")
.dependsOn(common)
这就行了
现在。任何项目的编译都会导致包的创建。甚至对于根目录
。如果您跟随控制台,在某个时候它会显示:
Packaging /project/com.github.atais/target/scala-2.10/root_2.10-0.1.jar
正如您所看到的,sbt需要决定一些Scala版本,只是为了构建这个jar!也就是说,您的项目A
和B
必须有一个通用的Scala版本,这样它们就可以聚合到一个通用的项目根
因此,您不能拥有:
lazy val root = (project in file("."))
.aggregate(common, A, B)
如果它们不共享任何Scala版本,则可以使用构建它们
但是sbt横渡前往救援
您可以使用插件来帮助您
在项目/plugins.sbt
中,添加
addSbtPlugin("com.lucidchart" % "sbt-cross" % "3.2")
并以以下方式定义您的build.sbt
:
lazy val common = (project in file("common")).cross
lazy val common_2_11 = common("2.11.8")
lazy val common_2_10 = common("2.10.6")
lazy val A = (project in file("A"))
.settings(scalaVersion := "2.10.6")
.dependsOn(common_2_10)
lazy val B = (project in file("B"))
.settings(scalaVersion := "2.11.8")
.dependsOn(common_2_11)
lazy val root = (project in file("."))
.aggregate(common, A, B)
然后它就起作用了:-) sbt doge,使用它,它解决了这个特殊情况BT dodge真的很有用,感谢@pfn
sbt doge
指针根本没有解决这个问题。