0

アップデート:

だから、私が理解しようとしている問題は、なぜ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.sbtproject/

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

4

1 に答える 1

2

ルート プロジェクトにはメイン クラスはなく、デモ プロジェクトにのみ存在します。

ルート プロジェクトで sbt を起動する場合は、次のコマンドを使用する必要があります。

  • project demo
  • run

同等の1行は次のとおりです。sbt demo/run

あなたの最新情報に対して、私はそれを行う方法がわかりません.

それぞれが独自のメインクラスを持つ多くのサブプロジェクトが存在する可能性があることに注意してください。そのような状況で、sbt は何をすべきでしょうか?

別の方法は、play プロジェクトをルート/集約として定義し、そこにサブプロジェクトを配置することです

于 2017-06-13T05:12:47.277 に答える