【问题标题】:Cross-compiling aggregate projects with different crossScalaVersions for subprojects为子项目使用不同的 crossScalaVersions 交叉编译聚合项目
【发布时间】:2017-07-15 03:36:28
【问题描述】:

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

特别是here is current Build.scala。如果我将lmsBackend 添加到root,我得到

> 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)

SBT 能够在这个聚合项目上很好地运行 updatecompile 等。但是,一旦我尝试任何交叉构建,事情就会中断:

> +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

show scalaVersion 现在为所有子项目显示2.10.4。有什么方法可以在聚合项目中包含lms-backend 并且仍然避免这个问题?

【问题讨论】:

标签: scala sbt


【解决方案1】:

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

sbt-doge,一个看似可爱的 GitHub 项目,将 + 的实现替换为其可互换的前缀之一:很多,所以,这样,非常。

当前实现 + 交叉构建运算符没有考虑子项目的 crossScalaVersions。在解决此问题之前,这是它的替代实现。

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


添加

addSbtPlugin("com.eed3si9n" % "sbt-doge" % "0.1.3")

project/plugins.sbt

然后

> very compile

【讨论】:

    【解决方案2】:

    我相信sbt-doge 可能不足以满足您的要求,因为这个插件也没有满足我的要求。

    我会推荐sbt-cross

    这个插件让你在你的模块之间有更大的灵活性,它提供了一种aggregate 不同 Scala 版本的模块的方法,而不需要有任何共同的版本!

    例子:

    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)
    

    我已经发布了类似的answer

    享受吧!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-14
      • 2015-03-28
      • 1970-01-01
      • 2019-07-13
      • 2013-09-13
      • 2022-01-21
      • 2013-07-30
      • 1970-01-01
      相关资源
      最近更新 更多