SBT Scala 跨版本,具有聚合和依赖关系

2023-11-24

我正在努力解决如何crossScalaVersions与子项目一起工作。

我有一个使用 2.10 (foo) 编译的项目和一个使用 2.11 (bar) 编译的项目。他们共享一个交叉编译的项目(常见)。

如何编译项目 foo 和 bar?


构建.sbt

lazy val root = (project in file(".")).aggregate(foo, bar).settings(
  crossScalaVersions := Seq("2.10.4", "2.11.4")
)

lazy val foo = (project in file("foo")).dependsOn(common).settings(
  crossScalaVersions := Seq("2.10.4"),
  scalaVersion := "2.10.4"
)

lazy val bar = (project in file("bar")).dependsOn(common).settings(
  crossScalaVersions := Seq("2.11.4"),
  scalaVersion := "2.11.4"
)

lazy val common = (project in file("common")).settings(
  crossScalaVersions := Seq("2.10.4", "2.11.4")
)

项目/build.properties

sbt.version=0.13.7

foo/src/main/scala/Foo.scala

object Foo {
  <xml>{new C}</xml>
}

酒吧/src/main/scala/Bar.scala

case class Bar(a: C, b: C, c: C, d: C, e: C, f: C, g: C,
  h: C, i: C, j: C, k: C, l: C, m: C, n: C, o: C, p: C,
  q: C, r: C, s: C, t: C, u: C, v: C, w: C, x: C, y: C,
  z: C)

公共/src/main/scala/Common.scala

class C {}

尝试1

$ sbt compile
[info] Resolving jline#jline;2.12 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: common#common_2.11;0.1-SNAPSHOT: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]      common:common_2.11:0.1-SNAPSHOT
[warn]        +- bar:bar_2.11:0.1-SNAPSHOT
sbt.ResolveException: unresolved dependency: common#common_2.11;0.1-SNAPSHOT: not found

尝试2

$ sbt +compile
[error] /home/paul/test/bar/src/main/scala/Bar.scala:1: Implementation restriction: case classes cannot have more than 22 parameters.
[error] case class Bar(a: C, b: C, c: C, d: C, e: C, f: C, g: C,
[error]            ^
[error] one error found
[error] (bar/compile:compile) Compilation failed

尝试3

$ sbt foo/compile bar/compile
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: common#common_2.11;0.1-SNAPSHOT: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Unresolved dependencies path:
[warn]      common:common_2.11:0.1-SNAPSHOT
[warn]        +- bar:bar_2.11:0.1-SNAPSHOT
sbt.ResolveException: unresolved dependency: common#common_2.11;0.1-SNAPSHOT: not found

尝试4

$ sbt +foo/compile +bar/compile
[error] /home/paul/test3/foo/src/main/scala/Foo.scala:2: To compile XML syntax, the scala.xml package must be on the classpath.
[error] Please see http://docs.scala-lang.org/overviews/core/scala-2.11.html#scala-xml.
[error]   <xml>{new C}</xml>
[error]   ^
[error] one error found
[error] (foo/compile:compile) Compilation failed

尝试5

我什至尝试定义common_2_10 and common_2_11具有相同基目录但不同 scala 版本的项目。我记得读到目标是按 Scala 版本命名的,但 SBT 说存在冲突。

$ sbt
[error] Overlapping output directories:/home/paul/test3/common/target:
[error]     ProjectRef(file:/home/paul/test3/,common_2_10)
[error]     ProjectRef(file:/home/paul/test3/,common_2_11)

我唯一要做的就是手动指定版本:

$ sbt ++2.10.4 foo/compile ++2.11.4 bar/compile

但这是很多命令,永远不能使用并行性,并且避免了(1)项目聚合和(2)交叉构建的整体使用。

我是否遗漏了一些关于意图的基本内容crossScalaVersions?或者有没有办法让它与 SBT 的其余部分很好地配合,并让我编译我的异构项目?


我最终声明了两次通用,每个版本一次。

lazy val root = (project in file(".")).aggregate(foo, bar)

lazy val foo = (project in file("foo")).dependsOn(common_2_10).settings(
  scalaVersion := "2.10.4"
)

lazy val bar = (project in file("bar")).dependsOn(common_2_11).settings(
  scalaVersion := "2.11.4"
)

def commonProject = (project in file("common")).settings(
  target := baseDirectory.value / s"target-${scalaVersion.value}"
)

lazy val common_2_10 = commonProject.settings(
  scalaVersion := "2.10.4"
)

lazy val common_2_11 = commonProject.settings(
  scalaVersion := "2.11.4"
)

请注意,我必须使目标目录不同,否则 SBT 会因为它们重叠而拒绝它。

另请注意def makes commonProject不包括 SBT 对项目定义的神奇(基于反射)搜索。


这不是最漂亮的,但它是健壮的、可读的且合理的。所有命令/任务都按预期工作。

从某种意义上说,这是甚至更好 than crossScalaVersions,现在可以编译 2.10 和 2.11 项目在平行下,这不会发生crossScalaVersions :)


编辑:我创建了一个 SBT 插件,sbt交叉,来帮忙解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SBT Scala 跨版本,具有聚合和依赖关系 的相关文章

  • Scala SBT 和 JNI 库

    我正在编写一个简单的应用程序Scala通过以下方式使用 leveldb 数据库leveldbjni图书馆 我的build sbt文件看起来像这样 name Whatever version 1 0 scalaVersion 2 10 2 l
  • 如何在Scala中实现尾递归快速排序

    我写了一个递归版本 def quickSort T xs List T p T T gt Boolean List T xs match case Nil gt Nil case gt val x xs head val left righ
  • Twitter Future 与 Scala Future 相比有何优势?

    我知道 Scala Future 变得更好的很多原因 有什么理由改用 Twitter Future 吗 除了 Finagle 使用它这一事实之外 免责声明 我在 Twitter 负责 Future 的实施 一点背景知识 在 Scala 有一
  • Spark:替换嵌套列中的空值

    我想更换所有n a以下数据框中的值unknown 它可以是scalar or complex nested column 如果它是一个StructField column我可以循环遍历列并替换n a using WithColumn 但我希
  • java.lang.ClassNotFoundException:将 akka 2.5.6 与 sbt 版本 1.0.2 一起使用时的 scala.Int

    我正在尝试将 akka remoting 版本 2 5 4 与最新的 sbt 1 0 2 一起使用 当我使用 sbt 版本 0 13 15 或 0 13 16 时 它运行得很好 但是当我使用 sbt 版本 1 0 2 作为here http
  • 如何在 Scala 中编写 Pig UDF

    我正在尝试在 Scala 中编写 Pig UDF 使用 Eclipse 我已将 pig jar 添加为 java 构建路径中的库 这似乎解决了以下 2 个导入问题 导入 org apache pig EvalFunc 导入 org apac
  • Spark - scala - 如何检查配置单元中是否存在表

    我必须使用 Spark 1 6 2 scala 检查配置单元中是否存在表 如果没有 我必须创建一个空数据框并将其保存为配置单元表 如果存在 则覆盖现有表 我需要一个返回布尔值的函数 基于该函数我可以做出上述决定 是否创建新表或覆盖现有表 1
  • 无法在 SBT 中运行 Apache Spark 相关单元测试 - NoClassDefFoundError

    我有一个简单的单元测试 使用SparkContext 我可以在 IntelliJ Idea 中运行单元测试 没有任何问题 但是 当尝试从 SBT shell 运行相同的测试时 我收到以下错误 java lang NoClassDefFoun
  • “函数是第一等值”这到底是什么意思?

    有人可以用一些很好的例子清楚地解释它吗 在解释函数式编程时 我在 Scala 中遇到了这句话 一流 并不是一个正式定义的概念 但它通常意味着一个实体具有三个属性 有可能used 不受限制 只要 普通 值可以 即从函数传递和返回 放入容器等
  • 如何从spark管道逻辑模型中提取变量权重?

    我目前正在尝试学习 Spark Pipeline Spark 1 6 0 我将数据集 训练和测试 导入为 oas sql DataFrame 对象 执行以下代码后 生成的模型是oas ml tuning CrossValidatorMode
  • 覆盖 Predef 的隐式转换

    我有多个返回 java lang Integer 的方法 然后使用 Scala 的 Predef 隐式转换将其隐式转换为 Int 下面是它的编写方式there https github com scala scala blob v2 11
  • 用惯用的 Scala 更新大型数据结构

    我已经尝试 Scala 一段时间了 并且经常遇到支持不可变数据结构的建议 但是当你有一个像这样的数据结构时3D 场景图 大型神经网络或任何具有大量需要频繁更新的对象的东西 对场景中的对象进行动画处理 训练神经网络 这似乎是 运行时效率极低
  • 如何将模型从 ML Pipeline 保存到 S3 或 HDFS?

    我正在尝试保存 ML Pipeline 生成的数千个模型 正如答案中所示here https stackoverflow com questions 32121046 run 3000 random forest models by gro
  • Scala 中抛出异常,什么是“官方规则”

    我正在 Coursera 上学习 Scala 课程 我也开始阅读 Odersky 的 Scala 书 我经常听到的是 在函数式语言中抛出异常不是一个好主意 因为它破坏了控制流 并且我们通常返回一个失败或成功的 Either Scala 2
  • 如何从字符串列中提取数字?

    我的要求是从列中的评论列中检索订单号comment并且总是开始于R 订单号应作为新列添加到表中 输入数据 code id mode location status comment AS SD 101 Airways hyderabad D
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 为什么 Scala 中的隐式类必须驻留在另一个特征/类/对象中?

    基于scala文档 http docs scala lang org overviews core implicit classes html http docs scala lang org overviews core implicit
  • HashPartitioner 是如何工作的?

    我阅读了文档HashPartitioner http spark apache org docs 1 3 1 api java index html org apache spark HashPartitioner html 不幸的是 除了
  • 高效序列化案例类

    对于我正在工作的图书馆 我需要提供一个高效 便捷 typesafe序列化 scala 类的方法 理想的情况是用户可以创建一个案例类 并且只要所有成员都是可序列化的 它似乎也应该如此 我准确地知道序列化和反序列化阶段的类型 因此不需要 也不能
  • 使用 net.liftweb.json 或 scala.util.parsing.json 解析大型 (30MB) JSON 文件会出现 OutOfMemoryException。有什么建议吗?

    我有一个包含大量测试数据的 JSON 文件 我想解析这些数据并推送我正在测试的算法 它的大小约为 30MB 包含大约 60 000 个元素的列表 我最初在 scala util parsing json 中尝试了简单的解析器 如下所示 im

随机推荐

  • 父 DIV 中的圆角不影响子 DIV

    所以 我正在尝试在 CSS3 中使用圆角 不在 IE 中 不关心它是否在那里工作 并且我有一个 DIV 我的所有内容都在其中看起来非常漂亮 我遇到的问题是 有些子 DIV 没有被父级的圆角 掩盖 我不是在寻找孩子继承圆角 我只想让父级内部的
  • 检索 iOS 中按上次播放时间排序的歌曲列表

    我需要获得一份清单N按顺序最近从 iOS 设备播放的歌曲 目前我能想象的唯一方法就是将所有歌曲都通过一个MPMediaQuery并手动对它们进行排序lastPlayedDate 这是一项可能昂贵的操作 我想知道是否有更好的方法 编辑 经过一
  • 如何将枚举数组序列化为 Json 字符串数组? [复制]

    这个问题在这里已经有答案了 根据迭戈在这个问题中得票最高的答案下未答复的评论 枚举的 JSON 序列化为字符串 所以对于一个枚举 public enum ContactType Phone 0 Email 1 Mobile 2 例如 一个属
  • gnuplot:应用数据文件中的颜色名称

    如何从数据文件中获取颜色名称 我没想到这会如此困难 但显然确实如此 为什么版本 1 和版本 2 给出错误的颜色 有没有像版本 3 那样不使用数组的更简单的方法来获得正确的颜色 和 lc var仅适用于索引值 不适用于颜色名称 colorna
  • 下载大尺寸json时如何解决Uncaught RangeError

    我正在尝试下载大型 json 数据 但这导致Uncaught RangeError Invalid string length 请帮忙解决这个问题 提前致谢 这是 Jsfiddle http jsfiddle net sLq3F 456 您
  • 在 Weblogic 12.1.3 上找不到文件 Metro-default.xml

    我们当前在 WebLogic 12 1 2 上运行 在这个环境中我们的应用程序运行良好 我们现在想要的是将我们的应用程序与 WebLogic 12 1 3 环境进行认证 但我们所使用的 Web 服务面临着一个问题 在新版本中 服务器抛出异常
  • 使用给定的概率密度函数生成随机数

    我想指定概率密度函数的分布 然后在 Python 中从该分布中选取 N 个随机数 我该如何去做呢 一般来说 您需要逆累积概率密度函数 一旦你有了这个 那么沿着分布生成随机数就很简单了 import random def sample n r
  • “inline-style”-内容安全策略和 Javascript 错误

    我在 Apache2 配置中使用以下命令在服务器上打开了内容安全策略 Header set Content Security Policy Report Only default src self 我将其设置为 Report Only仅报告
  • 错误,无法设置范围类的 FormulaArray 属性

    我创建了以下公式 IFNA LOOKUP 10 99 MID O2 MIN IF ISNUMBER MID O2 ROW 1 25 1 0 ISNUMBER MID O2 ROW 2 26 1 ROW 2 26 ROW 1 25 SUMPR
  • 如何作为脉冲应用程序在表格之间复制单元格

    我需要复制单元格2 个表视图之间 我有一个或多或少可行的解决方案 然而 这并不顺利 我很想做类似的事情脉冲应用程序重新排序 Feed 选项 脉冲工作方式的特殊之处在于 重新排序动画与正常的单元格重新排序相同 但单元格仍然可以在表之间移动 这
  • 如何模拟 httpcontext 使其在单元测试中不为 null?

    我正在编写一个单元测试 控制器方法抛出异常 因为 HttpContext ControllerContext 为 null 我不需要断言 HttpContext 中的任何内容 只需要它不为 NULL 即可 我做了研究 我相信最小起订量就是答
  • 如何在 Rails 测试中将 autotest 和 spork 结合起来?

    自动测试通过仅运行更改的测试来提高测试运行的速度 但我想通过使用 spork 预加载 Rails 环境来进一步推动它 这样我就能获得更快的反馈 这可能吗 自动测试 https github com grosser autotest Spor
  • D3圆弧渐变[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在尝试使用 d3 创建一个计时器 它的梯度会在 0 到 100 之间变化 例如 深橙色为 0 浅橙色为 100 我可以在深橙色和浅橙色之间进行弧线过渡 但在找到任何允许我对弧线应
  • 如何在MonoDevelop中进入框架源代码

    在 MonoDevelop 中调试项目时 如何进入 Mono Framework 源代码 我正在运行 openSUSE 11 3 中的普通 MonoDevelop 这是一篇旧帖子 但我今天偶然发现它寻找答案 所以希望它对其他人有帮助 除非您
  • 为什么 ***NO_CI*** 仍然导致持续集成构建?

    我最近发现了 TFS 的 隐藏功能 如果您的评论包含以下内容 它允许您阻止 CI 构建启动 NO CI 我在家里运行了 TFS 这个小技巧很有用 在工作中 我们还使用 TFS 2010 我发现这仍然不能阻止 CI 构建在我们的设置中启动 我
  • angularJS 发送 OPTIONS 而不是 POST

    我被困在这两天我找不到解决方案 当我执行 AngularJS POST 时 它会在标头中发送选项并从 API 返回错误 代码看起来没什么特别的 http defaults headers post Content Type applicat
  • 使用 require.js 和 Java/Rhino 解析模块

    我试图让 require js 使用 Java 6 和 Rhino 在服务器端加载模块 我能够很好地加载 require js 本身 犀牛可以看到require 功能 我可以看出 因为 Rhino 抱怨当我更改时它找不到该功能require
  • 将功能 pandas.series 中的 -inf 值替换为 np.nan [重复]

    这个问题在这里已经有答案了 我想将 pandas series 功能 我的数据帧的列 中的 inf 值替换为 np nan 但我无法做到 我努力了 df feature df feature replace np infty np nan
  • gcloud ml-engine 对大文件返回错误

    我有一个训练有素的模型 它接受较大的输入 我通常将其作为形状 1 473 473 3 的 numpy 数组来执行 当我将其放入 JSON 时 我最终得到了大约 9 2MB 的文件 即使我将其转换为 JSON 文件的 Base64 编码 输入
  • SBT Scala 跨版本,具有聚合和依赖关系

    我正在努力解决如何crossScalaVersions与子项目一起工作 我有一个使用 2 10 foo 编译的项目和一个使用 2 11 bar 编译的项目 他们共享一个交叉编译的项目 常见 如何编译项目 foo 和 bar 构建 sbt l