Scala 和 Scala.js 版本包含在工件 ID 中

Scala and Scala.js version included in artifact id

我刚刚成功发布了我的第一个 Scala 和 Scala.js 跨构建库到 Sonatype,现在可以在我的应用程序中使用以下两个工件:

我现在的问题是:为什么工件id中包含Scala和Scala.js版本?我不认为我以前见过这样的事情所以我想知道我是否做错了什么。这是我的 build.sbthttps://github.com/fbaierl/scalajs-cross-compile-tarjan/blob/03954a3e2d1442ad339298a986209c1403c9692e/build.sbt

这就是 Scala 工件的工作方式。几乎所有工件看起来都是这样的——当您在 sbt 中使用这些工件时它并不明显,因为 (IIRC) _2.12 由 sbt 中的 %% 运算符隐含。 (并且 _sjs0.6%%% 运算符隐含。)

其根本原因是不同主要版本的 Scala 编译器(Scala 版本 epoch.major.minor)编译的工件不是二进制兼容的(否则语言和标准库无法发展) .你不能混合,例如_2.12 和 _2.11 工件在类路径上,因此必须为两个 Scala 版本分别发布同一库的“相同”版本,因此需要后缀来区分它们。