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

Scala SBT: Scala версия компилятора

Я знаю, что библиотеки scala swing присутствуют в scala 2.8:

[info] Building project chart 1.0 against Scala 2.8.1
[info]    using sbt.DefaultProject with sbt 0.7.4 and Scala 2.7.7

Итак, почему я получаю эту ошибку:

[error] /src/main/scala/Chart.scala:2: value swing is not a member of package scala
[error] import scala.swing.Panel

Это потому, что SBT использует неправильную версию scala (т.е. 2.7.7)? Если да, как мне настроить его для использования правильной версии?

EDIT: ответ

Следуя Dylan Lacey answer, я сделал следующий файл sbt/project/build/chart.scala:

import sbt._

class SamplesProject(info: ProjectInfo) extends DefaultProject(info)
{
   val scalaSwing = "org.scala-lang" % "scala-swing" % "2.8.1"
}

Затем я побежал: sbt reload update из оболочки.

Теперь все скомпилируется!

4b9b3361

Ответ 1

Нет. Информация о версии, указанная в строке 2, - это только версия, с которой была построена sbt, она не повлияет на вашу сборку.

Поскольку Swing - это пакет (не входит в базовые классы), я подозреваю, что проблема является одной из двух вещей. Или:

  • В файле сборки не указано, что вы хотите использовать scala -swing и запутывается. Вы можете исправить это, добавив:

    val scalaSwing = "org.scala-lang" % "scala-swing" % "packageVersion"

    в вашем /project/build/projectName.scala(спасибо Janx!)

  • Вы добавили зависимость, но еще не загрузили требуемый пакет. Для этого вам нужно sbt, чтобы перезагрузить определение проекта, а затем получить все необходимые пакеты:

    sbt reload update

Если вам нужен вариант 1, вам, скорее всего, также понадобится вариант 2.

Если ни одна из этих функций не работает, вы можете запутать свой локальный репозиторий. Это можно зафиксировать с помощью sbt clear-lib, но затем вы повторно загрузите все свои пакеты.

Ответ 2

Для sbt 0.11 (и предположительно 0.10), добавив следующее в build.sbt, сделаем это:

libraryDependencies <+= scalaVersion { "org.scala-lang" % "scala-swing" % _ }