问题标签 [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.
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 工件。
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。
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 中是否有任何现有选项来支持交叉构建?
plugins - 当指定 scalaVersion 和 sbtVersion 通过“extra”解析插件依赖时,不起作用
我正在尝试添加这样的插件:
但是当我开始 sbt session 时,搜索路径仍然是
scalaVersion 和 sbtVersion 仍然是我正在使用的。
你能告诉我我该怎么办吗?
谢谢!
scala - 如何强制 sbt 使用与依赖项目兼容的 scalaVersion 来解决依赖关系
尤其考虑以下一些build.sbt
和没有源代码的内容:
在这里, sbt y/compile
, 失败了
这是通过sbt "show y/fullResolvers"
参考解释
为什么它指的是_2.12
?我想既然sbt "show y/allDependencies"
列表
作为缺少scalaVersion
和的依赖项, _2.12
sbt 不理解(与外部库依赖项不同)要查找的 scala 版本。_2.12
似乎源自默认为某些 2.12.x 的 or 值,更改范围ThisBuild
之一Global
可以解决上述简化示例的问题,但如果我们添加scalaVersion
scalaVersion
那么我们scalaVersion
在Global / ThisBuild
范围内选择的任何价值,要么无法建立,要么y
将z
无法建立。
我知道sbt "+ y/compile"
但为什么不sbt y/compile
正确默认为scalaVersion
依赖项目和依赖项之间的匹配?还是可以scalaVersion
在解决依赖关系时选择正确的?
sbt "show sbtVersion"
给了我1.2.1
,但我在不同版本中看到了同样的问题,以前没有在线解释帮助我理解/规避问题。
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:
所以我想顺序是:
- sbt 使用默认的 Scala 版本加载插件配置。
- 交叉构建更改了 scala 版本
如何sbt-protoc
与 sbt cross-build 集成?
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。
我的问题:
- 甚至有可能做到这一点吗?或者是我这里提到的降级到 2.12 的唯一选择
- 为什么“核心”库不遵循外部库的 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