2015-12-15 4 views
0

У меня есть проект с несколькими SBT в IntellJ Idea. Мой файл SBT в корневой директории выглядит следующим образом:SBT: Как установить общую версию scala для мультипроекта

name := "PlayRoot" 

version := "1.0" 

lazy val shapeless_learn = project.in(file("shapeless_learn")).dependsOn(common) 
lazy val scalaz_learn = project.in(file("scalaz_learn")).dependsOn(common) 
lazy val common = project.in(file("common")) 

lazy val root = project.in(file(".")).aggregate(common, shapeless_learn, scalaz_learn) 

scalaVersion := "2.11.7" 

Тогда у меня есть папки для каждого из проектов: ./common, ./shapeless_learn, ./scalaz_learn и каждый из них имеет свой собственную build.sbt там. Но по какой-то причине мне нужно помещать в каждый из подпроектов build.sbt файлы строку scalaVersion := "2.11.7".

Если я забыл сделать это, сборка завершается с сообщением:

Error:Unresolved dependencies: common#common_2.10;0.1-SNAPSHOT: not found 
See complete log in ... 

По какой-то причине, если я не указываю, что моя Scala версия 2.11.7, SBT возвращается к 2.10 и пытается найти common проект, который построен для 2.10, которого у меня нет.

Я всегда забываю добавить scalaVersion := "2.11.7" к вновь созданному проекту, и он продолжает прослушивать меня. Я также предпочел бы, чтобы sbt генерировал build.sbt с некоторыми данными по умолчанию, но вместо этого он требует, чтобы я не забывал создавать его вручную.

  1. Есть ли способ, которым я мог бы установить единую версию SCALA для всех проектов и подпроектов в одном месте? Я понял, что могу добавить отдельный lazy val commonSettings = Seq { scalaVersion := "2.11.7" } в определении root. И для каждого определения lazy val project я должен добавить в конце .settings(commonSettings). Это приятно, но все равно выглядит недостаточно красиво - я должен делать это для каждого определения проекта. Есть ли способ лучше?

  2. Есть ли способ создать шаблон для вновь созданного проекта, поэтому, когда я просто положу строку lazy val newProject = ..., он разместит соответствующий файл build.sbt с содержимым, которое я хочу?

ответ

3

Использование

scalaVersion in ThisBuild := "2.11.7" 

в корне build.sbt.

Смежные вопросы