为子项目交叉编译具有不同crossScalaVersions的聚合项目

Ale*_*nov 4 scala sbt

我们有一个项目有几个子项目,可以在Scala 2.10和2.11下编译,一个子项目只编译在2.10(实际上是Scala-Virtualized 2.10.2)和一个子项目只编译在2.11下.有没有一种简单的方法来创建一个聚合项目,它为2.10和2.11交叉构建所有可能的子项目?或者,或者,为2.10和2.11设置不同的默认项目?

特别是,这是当前的Build.scala.如果我想补充lmsBackendroot,我得到

> show scalaVersion
[info] common/*:scalaVersion
[info]  2.10.4
[info] lms-backend/*:scalaVersion
[info]  2.10.2
[info] meta/*:scalaVersion
[info]  2.10.4
[info] community-edition/*:scalaVersion
[info]  2.10.4
[info] core/*:scalaVersion
[info]  2.10.4
[info] scalan/*:scalaVersion
[info]  2.10.4
> show crossScalaVersions
[info] common/*:crossScalaVersions
[info]  List(2.10.4, 2.11.5)
[info] lms-backend/*:crossScalaVersions
[info]  List(2.10.2)
[info] meta/*:crossScalaVersions
[info]  List(2.10.4, 2.11.5)
[info] community-edition/*:crossScalaVersions
[info]  List(2.10.4, 2.11.5)
[info] core/*:crossScalaVersions
[info]  List(2.10.4, 2.11.5)
[info] scalan/*:crossScalaVersions
[info]  List(2.10.4, 2.11.5)
Run Code Online (Sandbox Code Playgroud)

SBT能够运行update,compile等精美这个总的项目.但是,一旦我尝试任何交叉构建,事情就会破裂:

> +update
[info] Setting version to 2.10.4
[info] Reapplying settings...
[info] Set current project to scalan (in build file:/home/aromanov/IdeaProjects/scalan-lite/)
...
[info] Updating {file:/home/aromanov/IdeaProjects/scalan-lite/}lms-backend...
[info] Resolving org.scala-lang.virtualized#scala-library;2.10.4 ...
[warn]  module not found: org.scala-lang.virtualized#scala-library;2.10.4
...
[info] Resolving org.scala-lang.virtualized#scala-compiler;2.10.4 ...
[warn]  module not found: org.scala-lang.virtualized#scala-compiler;2.10.4
...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.scala-lang.virtualized#scala-library;2.10.4: not found
[warn]  :: org.scala-lang.virtualized#scala-compiler;2.10.4: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]      org.scala-lang.virtualized:scala-library:2.10.4 ((sbt.Classpaths) Defaults.scala#L1169)
[warn]        +- com.huawei.scalan:lms-backend_2.10:0.2.6-SNAPSHOT
[warn]      org.scala-lang.virtualized:scala-compiler:2.10.4
[warn]        +- com.huawei.scalan:lms-backend_2.10:0.2.6-SNAPSHOT
[trace] Stack trace suppressed: run last lms-backend/*:update for the full output.
[error] (lms-backend/*:update) sbt.ResolveException: unresolved dependency: org.scala-lang.virtualized#scala-library;2.10.4: not found
[error] unresolved dependency: org.scala-lang.virtualized#scala-compiler;2.10.4: not found
[error] Total time: 2 s, completed Jan 28, 2015 1:33:49 PM
Run Code Online (Sandbox Code Playgroud)

show scalaVersion现在显示2.10.4所有子项目.有没有办法包含lms-backend在聚合项目中仍然可以避免这个问题?

Pau*_*per 5

我有一个类似的问题.我的问题有一个类路径依赖(dependsOn)的额外复杂性,而不仅仅是聚合,但我的问题的一个解决方案很好地修复了这个问题.

sbt-doge,一个看似可爱的 GitHub项目,+用一个可互换的前缀取代了它的实现:很多,所以,非常.

+跨建筑运营商的当前实施没有考虑子项目的crossScalaVersions.在修复之前,这是一个替代实现.

该项目的创建者是SBT的主要贡献者之一.


addSbtPlugin("com.eed3si9n" % "sbt-doge" % "0.1.3")
Run Code Online (Sandbox Code Playgroud)

project/plugins.sbt.

然后

> very compile
Run Code Online (Sandbox Code Playgroud)