#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
каталоге)?