Не удается сгенерировать исходный код с SBT 0.11 из «Полной конфигурации»

#scala #code-generation #sbt

#scala #генерация кода #sbt

Вопрос:

На основе доступной документации sbt 0.11.0 (вики-страница «Общие задачи» и другие) и, увидев, как это делается в Scalaz SBT build и в Scalate SBT build, я не могу понять, почему мой простой пример не работает:

 import sbt._
import Keys._

object MyBuild extends Build {

  lazy val project = Project(
    id = "root", 
    base = file("."),
    settings = Defaults.defaultSettings    Seq(
      (sourceGenerators in Compile) < = (sourceManaged in Compile) map { dir =>
        val file = dir / "bla.scala"
        IO.write(file, """object Bla extends App { println("bla!") }""")
        Seq(file)
      }
    )
  )

}
  

Включение этого в project / build.scala пустого проекта и запуск «sbt compile» ничего не генерирует / не компилирует, а «sbt run» жалуется, что не может найти какой-либо основной класс.

Теперь, если я помещу настройку в build.sbt «быстрой настройки» следующим образом вместо полной конфигурации, как указано выше, она просто работает.

 (sourceGenerators in Compile) < = (sourceManaged in Compile) map { dir =>
    val file = dir / "bla.scala"
    IO.write(file, """object Bla extends App { println("bla!") }""")
    Seq(file)
}
  

Очевидно, что необходимость создания файла build.sbt в проекте, использующем только «полную конфигурацию», далеко не желательна, по крайней мере для меня.

Итак, почему этот параметр не работает в полной конфигурации?

Комментарии:

1. Я скопировал и вставил вышеуказанное в project / Build.scala, запустил «sbt run», и он напечатал bla! как и ожидалось. Возможно, проверьте, что имя файла указано правильно и что определение загружается, введя println в объект или изменив параметр и убедившись, что он вступил в силу.

2. project/build.scala Сбой происходит там, где project/Build.scala успешно?

3. этот парень вполне заслуживает массового голосования за то, что ответ не был принят в течение года. позвольте мне быть первым 🙂

Ответ №1:

Просто скопируйте и вставьте свой код в файл project/Build.scala и запустите его, sbt run и это сработает.

Вы уверены, что ваш Build.scala правильно расположен (должен быть в project каталоге)?