Версия Scala и Scala.js включена в идентификатор артефакта
Я только что успешно выпустил мою первую библиотеку Scala & Scala.js для сборки в Sonatype и теперь могу использовать следующие два артефакта в своих приложениях:
- https://search.maven.org/artifact/com.github.fbaierl/scala-tarjan_2.12/0.1.1/jar
- https://search.maven.org/artifact/com.github.fbaierl/scala-tarjan_sjs0.6_2.12/0.1.1/jar
Теперь у меня вопрос: почему версия 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, поэтому для их различения необходим суффикс.