アップデート:
だから、私が理解しようとしている問題は、なぜbuild.sbt
ルートフォルダに. lazy val root = ...
ルートbuild.sbt
フォルダにa を定義しても、メイン クラスが見つかりません。
このredditリンク:
https://www.reddit.com/r/scala/comments/4igc9x/sbt_playframework_no_main_class_detected/
問題の解決策を提案します。プレイアプリを実行しますが、最終的にはルートプロジェクトからすべてのプロジェクトをコンパイルしてサーバーを実行しsbt demo/run
たいと思います。sbt run
誰でもここで助けてもらえますか?
================================================== ===============
古い質問:
build.sbt の仕組みを理解しようとしていますが、何が起こっているのかわかりません。ルートの build.sbt ファイルの下でビルドされている複数のプロジェクトの 1 つとして、play プロジェクトをビルドしたいと考えています。
私は次の構造を持っています(簡潔にするためにほとんどのファイルは省略されています):
.
|-- 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)
root の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
、プロジェクトは正常にコンパイルされ、通常の方法で再生サーバーにアクセスできます。
このエラーがスローされるのはなぜですか? root で play プロジェクトのメイン クラスを明示的に宣言する必要がありbuild.sbt
ますか? http://www.scala-sbt.org/0.13/docs/Multi-Project.htmlの指示に従っていますが、少し迷っています。正しい方向への助けをいただければ幸いです。
参考のため - -
sbt バージョン: 0.13.15
スカラバージョン: 2.11.11
プレイプラグインのバージョン: 2.5.14