Подтвердить что ты не робот

Scala -library.jar версия в sbt опубликованных артефактах

Как скоро будет выходить Scala 2.10.1, я считаю, что хочу, чтобы артефакты, которые я публиковал сейчас, будут автоматически работать с scala -library.jar этой версии. Я использую sbt 0.12.2 для публикации и с настройкой

scalaVersion := "2.10.0"

Я правильно подключил двоичную совместимую версию к моему артефакту, например

<artifactId>mylibrary_2.10</artifactId>

... но зависимость библиотеки Scala все еще говорит 2.10.0:

     <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.10.0</version> <!-- !!! -->
    </dependency>

Я полагаю, что это неверно, и он должен использовать 2.10 или 2.10. + здесь?


Я также попытался добавить scalaBinaryVersion := "2.10", но это ничего не меняет.

Еще одна идея, которую я использовал, - использовать scalaVersion := "2.10.+". Sbt берет навсегда с Getting Scala 2.10.+ ..., но он, наконец, идет отлично, а pom имеет эту версию теперь для scala -library.jar. Так может быть, это правильный способ?

4b9b3361

Ответ 1

Вы должны быть добры идти на 2.10.x, поскольку он предназначен для двоичной совместимости между второстепенными версиями (как описано в примечания к выпуску).

В общем, вы можете генерировать артефакты для произвольных версий Scala с помощью параметра crossScalaVersions в sbt.

build.sbt

name := "so-14803362"

scalaVersion := "2.10.0"

crossScalaVersions := Seq("2.10.0", "2.10.1", "2.10.2")

В приведенной выше конфигурации вы можете добавить команды + to sbt для их запуска для каждой версии Scala:

> + publish

Это создаст и опубликует ваши артефакты проекта с каждой версией Scala, указанной в crossScalaVersions.

Подробнее см. sbt docs.

Ответ 2

Я думаю, что если вы генерируете "fat JAR", все определяется версиями прямых зависимостей (исправьте меня, если я ошибаюсь), потому что их прямые зависимости указаны и так далее. Конечно, это не гарантирует вас от некоторых компонентов, зависящих от версии библиотеки Scala, отличной от вас, вам не гарантировано от компонентов, которые зависят от разных версий некоторых lib и, конечно, Scala находится в стадии активной разработки но если вы придерживаетесь некоторой версии библиотеки Scala и хорошо протестировали, пока это не изменится, вы в порядке.

Но вы не можете гарантировать, что все будет хорошо в следующей библиотеке Scala, потому что у вас также есть другие компоненты, которые, вероятно, не синхронизированы в тот же день, верно? И, да, версия библиотеки Scala должна соответствовать версии используемого компилятора Scala.