问题标签 [scala-version-cross-build]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
366 浏览

scala - 正在构建交叉构建工件,但不是使用 `releaseCrossBuild := true`

我正在尝试发布为 Scala v2.11 和 v2.12 交叉构建的https://github.com/guardian/marley版本。所有代码依赖项都得到满足,并且都+test+publishLocalSigned预期工作,后者肯定会为 Scala v2.11 和 v2.12 生成工件。不幸sbt release的是,使用sbt-sonatype插件执行只会上传Scala v2.12 的工件 - 它不会尝试将 Scala v2.11 的工件上传到 sonatype 临时存储库。

以下是build.sbt文件中的相关 sbt 设置(GitHub 上的 repo 中的完整版本):

sbt release这是命令输出的完整副本: https ://gist.github.com/rtyley/5f9f832fabe2bdcfc2d561a36c29f993 - 即使[info] Setting scala version to 2.11.12发生(两次),您也可以看到 - 仅上传了 Scala 2.12 工件。

0 投票
1 回答
326 浏览

scala - sbt 脚本插件作为对发布交叉编译的 scala 版本的未解决依赖而失败

我们的play-googleauth库基于 Scala 2.12 构建,并使用 sbt 1.1.6 交叉编译为 Scala 2.11。由于该库旨在在 Play 项目中运行,因此我们历来提供了一个使用该库的独立 Playframework 项目示例,以便用户了解如何设置它。

我最近将 sbt 插件添加scripted到项目中,这样通过运行 sbt 命令scripted我们可以检查示例项目是否正常工作。但是,我现在发现我们的发布过程失败了:

如果您克隆 repo 并签出scripted-plugin-fails-to-resolve标签,您可以通过运行sbt +publishLocal.

这里出了什么问题?是scripted针对 sbt 插件开发而不是 Scala 库的问题(如果是,是否有一个好的选择)?我知道它scripted在 Play 2.6 中使用,它可以交叉编译为 Scala 2.12 和 2.11。

0 投票
1 回答
1121 浏览

scala - 在 Intellij 中构建一个交叉构建的 sbt 项目

我有一个包含三个模块 A、B、Common 的 sbt 项目,其中

  • A 与 2.11.12 的 scala 版本兼容,并且依赖于 Common
  • B 兼容 scala 版本 2.12.7 并且依赖于 Common
  • Common 可以与 2.11.12、2.12.7 版本交叉编译

为了支持这一点,我创建了build.sbt如下:

通过提供前缀update,我能够compile从 sbt shell 这个项目。+

但是当我尝试使用 sbt 项目刷新选项在 Idea Intellij Ultimate 2017.3 版本中构建项目时,它出现以下错误:

从错误中可以明显看出,它在更新 A 时未能解决 Common 模块的 2.11 依赖关系。如果我运行update而不是+ update从 shell 运行,则会发生类似的错误。

如何在 Intellij 中进行交叉构建工作?或者 Intellij 中是否有任何现有选项来支持交叉构建?

0 投票
1 回答
162 浏览

plugins - 当指定 scalaVersion 和 sbtVersion 通过“extra”解析插件依赖时,不起作用

我正在尝试添加这样的插件:

但是当我开始 sbt session 时,搜索路径仍然是

scalaVersion 和 sbtVersion 仍然是我正在使用的。

你能告诉我我该怎么办吗?

谢谢!

0 投票
1 回答
411 浏览

scala - 如何强制 sbt 使用与依赖项目兼容的 scalaVersion 来解决依赖关系

尤其考虑以下一些build.sbt和没有源代码的内容:

在这里, sbt y/compile, 失败了

这是通过sbt "show y/fullResolvers"参考解释

为什么它指的是_2.12?我想既然sbt "show y/allDependencies"列表

作为缺少scalaVersion和的依赖项, _2.12sbt 不理解(与外部库依赖项不同)要查找的 scala 版本。_2.12似乎源自默认为某些 2.12.x 的 or 值,更改范围ThisBuild之一Global可以解决上述简化示例的问题,但如果我们添加scalaVersionscalaVersion

那么我们scalaVersionGlobal / ThisBuild范围内选择的任何价值,要么无法建立,要么yz无法建立。

我知道sbt "+ y/compile"但为什么不sbt y/compile正确默认为scalaVersion依赖项目和依赖项之间的匹配?还是可以scalaVersion在解决依赖关系时选择正确的?


sbt "show sbtVersion"给了我1.2.1,但我在不同版本中看到了同样的问题,以前没有在线解释帮助我理解/规避问题。

0 投票
1 回答
91 浏览

scala - 如何将 sbt-protoc 和 scalapb 与 sbt 交叉构建集成?

我有一个库,需要两个不同版本的库,"com.thesamet.scalapb" %% "compilerplugin"具体取决于 Scala 版本。

在我的project/scalapb.sbt我有这个代码:

执行sbt clean "++2.11.12 compile我得到>>>>>>>> Using lastest version. 2.12但在日志中,我还可以看到交叉构建插件在上一条消息之后将版本更改为 Scala 2.11:

所以我想顺序是:

  1. sbt 使用默认的 Scala 版本加载插件配置。
  2. 交叉构建更改了 scala 版本

如何sbt-protoc与 sbt cross-build 集成?

0 投票
1 回答
50 浏览

scala - 是否可以使用 SBT 为特定依赖项强制执行不同的 scala 版本

我对斯卡拉很陌生。在将多模块项目升级到 Scala 2.13 时,我发现在 Scala 2.12 中编译的这个依赖项class not found在运行时抛出异常

这个类在 2.13 中被移除。它仅在2.12之前可用。我正在寻找一种强制 v2.12编译此依赖项的方法。

我尝试使用交叉构建,但这不适用于核心库,因为使用以下构造的依赖项 url:

好像

此外,交叉构建似乎是允许使用其兼容的依赖版本编译具有不同 scala 版本的子模块的方式,而不是用于在单个依赖项上强制执行 scala 版本。

编辑 1: 这是构建定义:

该依赖项是一个内部公共库。这在编译时使用类scala/collection/mutable/ArrayOps 。scala-lang -> scala-library

我的问题

  1. 甚至有可能做到这一点吗?或者是我这里提到的降级到 2.12 的唯一选择
  2. 为什么“核心”库不遵循外部库的 url 模式,例如: [organisation]/[module](_[scalaVersion])(_[sbtVersion])/[revision]. `相反,它看起来像https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.15/scala-library-2.12.15.pom