как установить основной класс В проекте SBT 0.13
не могли бы вы, ребята, объяснить мне, как установить основной класс В проекте SBT ? Я пытаюсь использовать версию 0.13.
моя структура каталогов очень проста (в отличие от документации SBT). В корневой папке у меня есть build.sbt
следующего содержания
name := "sbt_test"
version := "1.0"
scalaVersion := "2.10.1-local"
autoScalaLibrary := false
scalaHome := Some(file("/Program Files (x86)/scala/"))
mainClass := Some("Hi")
libraryDependencies ++= Seq(
"org.scalatest" % "scalatest_2.10" % "2.0.M5b" % "test"
)
EclipseKeys.withSource := true
и у меня есть подпапка project
С одним файлом Hi.scala
, который содержит следующий код
object Hi {
def main(args: Array[String]) = println("Hi!")
}
Я могу скомпилировать его, позвонив sbt compile
но sbt run
возвращает
The system cannot find the file C:workexternalssbtbinsbtconfig.txt.
[info] Loading project definition from C:worktest_projectssbt_testproject
[info] Set current project to sbt_test (in build file:/C:/work/test_projects/sbt_test/)
java.lang.RuntimeException: No main class detected.
at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) No main class detected.
[error] Total time: 0 s, completed Apr 8, 2013 6:14:41 PM
PS.
Я в шоке, что после прочтения документации SBT и 15 подобных вопросов о StackOverflow я не мог запустить проект SBT. Это базовая функциональность, которая должна быть простой и понятной в первые 10 секунд просмотра веб-сайта SBT.
PS2.
и я хотел бы попросить сотрудников Typesafe улучшить документацию своего продукта вместо того, чтобы опускать вопросы людей, которые инвестируют значительное время при переходе на новую платформу.
6 ответов:
вам нужно поместить источник вашего приложения в
src/main/scala/
,project/
- это код определения сборки.
попробуйте использовать объект и расширить его из приложения вместо использования класса
object Main extends App { println("Hello from main scala object") }
потому что вам нужно запустить основной метод ни основной класс
вот как указать основной класс
mainClass in (Compile,run) := Some("my.fully.qualified.MainClassName")
для пользовательских модулей в SBT (0.13), просто введите на консоли SBT:
project moduleX [info] Set current project to moduleX (in build file:/path/to/Projects/) > run [info] Running main
чтобы переключить область на moduleX, как определено в Built.скала. Все основные классы в пределах этой области будут обнаружены автоматически. В противном случае вы получите ту же ошибку без основного класса не обнаружено. Ради Бога, SBT не говорит вам, что область по умолчанию не установлена. Это не имеет ничего общего с исходными папками по умолчанию и не по умолчанию, но только с SBT, не говоря ничего, что он не знает, что модуль для использования по умолчанию.
большой намек на typesafe: пожалуйста, добавьте вывод по умолчанию, как:
[info] Project module is not set. Please use ''project moduleX'' set scope or set in Built file (LinkToDocu)
в конце SBT начните снижать уровень разочарования при использовании SBT на многомодульных проектах.....
если у вас есть несколько главных методов в вашем проекте, вы можете добавить следующую строку в вашу сборку.sbt file:
val projectMainClass = "com.saeed.ApplicationMain" mainClass in (Compile, run) := Some(projectMainClass)
если вы хотите указать класс, который будет добавлен в манифест, когда ваше приложение будет упаковано в файл JAR, добавьте эту строку в свою сборку.sbt file:
mainClass in (Compile, packageBin) := Some(projectMainClass)
вы также можете указать основной класс, используя команду run-main в sbt и активатор для запуска:
sbt "run-main com.saeed.ApplicationMain"
или
activator "run-main com.saeed.ApplicationMain"
у меня была та же проблема: был режим после урока в http://www.scala-sbt.org/0.13/docs/Hello.html, и на мой взгляд, как инструмент сборки
sbt
взаимодействие и сообщения об ошибках могут ввести в заблуждение новичка.оказалось, спустя несколько часов почесывания головы, что я пропустил критическое
cd hello
строка в примере каждый раз. : - (