Ответ 1
перекрестное здание
Наличие нескольких версий Scala в sbt довольно распространено и называется перекрестным построением или перекрестной публикацией. Подробнее см. Sbt Страница кросс-строительной техники. Все, что вам нужно сделать, это:
scalaVersion := "2.10.2"
crossScalaVersions := Seq("2.10.2", "2.9.2")
В соответствии с соглашением об именах sbt в опубликованном артефакте будет исправлено сообщение о бинарной версии, которое _2.10
для Scala 2.10.x и _2.9.2
для Scala 2.9.2. Это необходимо для использования бинарной совместимости между сериями 2.10. Вы можете использовать crossVersion
для управления этим аспектом.
перекрестное построение против внешней библиотеки
Перекрестное построение против внешней библиотеки немного сложнее. Сложная ситуация, о которой я могу думать, - плагин для Dispatch. Там я создал пользовательскую настройку dispatchVersion
:
lazy val dispatchVersion = SettingKey[String]("x-dispatch-version")
Это установлено в buildSettings
как
dispatchVersion := "0.10.1"
и моя версия с префиксом dispatch0.10.0_
:
version <<= dispatchVersion { dv => "dispatch" + dv + "_0.1.0" }
Здесь, как добавить зависимости, используя ключ:
libraryDependencies <++= (dispatchVersion) { (dv) => Seq(
"net.databinder.dispatch" %% "dispatch-core" % dv,
"net.databinder.dispatch" %% "dispatch-json4s-native" % dv
)}
Для библиотек Java это должно быть %
вместо %%
:
libraryDependencies <++= (externalLibVersion) { (el) => Seq(
"org.apache" % "foo" % el,
"org.apache" % "foo-extention" % el
)}
Помимо создания настраиваемого плагина, такого как sbt-cross-building, нет простого способа повторить последовательность внешних версий. Вы можете написать оболочку script как:
sbt "set externalLibVersion := \"1.0\"" +assembly "set externalLibVersion := \"2.0\"" +assembly "set externalLibVersion := \"3.0\"" +assembly