Обновлять:
Итак, проблема, которую я пытаюсь понять, заключается в том, почему у меня не может быть build.sbt
в корневой папке. Даже если я определю lazy val root = ...
в корневой папке build.sbt
, основной класс не будет найден.
Эта ссылка на реддит:
https://www.reddit.com/r/scala/comments/4igc9x/sbt_playframework_no_main_class_detected/
предлагает решение проблемы. В то время как sbt demo/run
действительно выполняет приложение для воспроизведения, я хотел бы в конечном итоге просто sbt run
из корневого проекта скомпилировать и все проекты, а затем запустить сервер.
Кто-нибудь может помочь здесь?
=================================================================
Старый вопрос:
Я пытаюсь понять, как работает build.sbt, и я не уверен, что происходит. Я хотел бы создать игровой проект как один из нескольких проектов, создаваемых в корневом файле build.sbt.
У меня есть следующая структура (большинство файлов опущены для краткости):
.
|-- build.sbt
|-- project/
| |-- build.properties
| |-- plugins.sbt
| |-- project/
|-- demo/
| |-- build.sbt
| |-- app/
| |-- conf/
| | |-- application.conf
| | |-- routes
| |-- public/
| |-- test/
внутри файла корневого каталога build.sbt
у меня есть следующее.
name := "demo-root"
organization := "com.example"
scalaVersion in ThisBuild := "2.11.11"
lazy val root = (project in file("."))
.dependsOn(demo)
.aggregate(demo)
lazy val demo = project
.enablePlugins(PlayScala)
Я определил addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.14")
внутри plugins.sbt
в корне project/
.
внутри demo/build.sbt
у меня есть
name := "demo"
version in ThisBuild := "1.0-SNAPSHOT"
libraryDependencies += filters
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "2.0.0" % Test
Теперь, когда я выполняю sbt run
, я получаю следующую ошибку:
java.lang.RuntimeException: No main class detected.
at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last root/compile:run for the full output.
[error] (root/compile:run) No main class detected.
Однако если я помещу корень build.sbt
и корень project/
внутрь demo/
и попытаюсь sbt run
, проект успешно скомпилируется, и я смогу получить доступ к игровому серверу обычным способом.
Почему вылетает эта ошибка? Нужно ли явно объявлять основной класс для проекта воспроизведения в корневом каталоге build.sbt
? Я следую инструкциям на странице http://www.scala-sbt.org/0.13/docs/Multi-Project.html, и я немного растерялся. Любая помощь в правильном направлении будет оценена по достоинству.
Для справки ---
версия сбт: 0.13.15
Скала версия: 2.11.11
версия плагина для игры: 2.5.14
libraryDependencies
из корняbuild.sbt
относятся кdemo/build.sbt
, также вам не нужно.enablePlugins(PlayScala)
в корнеbuild.sbt
, как вы уже делаете это вdemo/build.sbt
(куда он относится). Как дела после их замены? - person Frederic A.   schedule 13.06.2017