Версия Scala и Scala.js включена в идентификатор артефакта

Я только что успешно выпустил мою первую библиотеку Scala & Scala.js для сборки в Sonatype и теперь могу использовать следующие два артефакта в своих приложениях:

Теперь у меня вопрос: почему версия Scala и Scala.js включена в идентификатор артефакта? Я не думаю, что видел такую ​​вещь раньше, поэтому мне было интересно, сделал ли я что-то не так. Вот мой build.sbt: https://github.com/fbaierl/scalajs-cross-compile-tarjan/blob/03954a3e2d1442ad339298a986209c1403c9692e/build.sbt

1 ответ

Решение

Так работают артефакты Scala. Практически все артефакты выглядят так - просто не очевидно, когда вы используете эти артефакты в sbt, потому что (IIRC) _2.12 подразумевается %% оператор в сб. (И _sjs0.6 подразумевается %%% оператор).

Основная причина этого заключается в том, что артефакты, скомпилированные различными основными версиями компилятора Scala (версии Scala - epoch.major.minor), не являются двоично-совместимыми (поскольку в противном случае язык и стандартная библиотека не могли бы развиваться). Например, нельзя смешивать артефакты _2.12 и _2.11 на пути к классам, поэтому "одинаковые" версии одной и той же библиотеки должны публиковаться отдельно для обеих версий Scala, поэтому для их различения необходим суффикс.

Другие вопросы по тегам