sbt.build用于多个项目和playframework

sbt.build用于多个项目和playframework,playframework,playframework-2.0,sbt,sbt-plugin,Playframework,Playframework 2.0,Sbt,Sbt Plugin,更新: 因此,我试图理解的问题是,为什么我不能在根文件夹中拥有build.sbt。即使我在rootbuild.sbt文件夹中定义了一个lazy val root=…,也找不到主类 此reddit链接: 提出了解决问题的办法。虽然sbt demo/run确实执行play应用程序,但我希望最终让sbt从根项目编译所有项目,然后运行服务器 有人能帮忙吗 ================================================================= 老问题: 我试图

更新:

因此,我试图理解的问题是,为什么我不能在根文件夹中拥有
build.sbt
。即使我在root
build.sbt
文件夹中定义了一个
lazy val root=…
,也找不到主类

此reddit链接:

提出了解决问题的办法。虽然
sbt demo/run
确实执行play应用程序,但我希望最终让
sbt从根项目编译所有项目,然后运行服务器

有人能帮忙吗

=================================================================

老问题:

我试图了解build.sbt是如何工作的,但我不确定发生了什么。我想将play项目作为根build.sbt文件下正在构建的多个项目之一进行构建

我有以下结构(为了简洁起见,大多数文件被省略):

在根目录
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)
我已经在根
项目中的
plugins.sbt
中定义了
addSbtPlugin(“com.typesafe.play“%”sbt plugin“%”2.5.14”)

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.
但是,如果我将root
build.sbt
和root
project/
放在
demo/
中,并尝试运行
sbt
,则项目编译成功,我可以正常访问播放服务器

为什么会抛出此错误?我是否需要在root
build.sbt
中为play项目显式声明一个主类?我在按指示做,只是有点迷路了。任何方向正确的帮助都将不胜感激

供参考---

sbt版本:0.13.15

scala版本:2.11.11


play plugin版本:2.5.14

根项目中没有主类,只有在演示项目中

在根项目中启动sbt时,必须使用以下命令:

  • 项目演示
  • 运行
等效的一行可以是:
sbt演示/运行

对于您的更新,我不知道如何做到这一点,我建议您不要这样做,而且我非常确定sbt不会为您做现成的事情

请记住,可能有许多子项目,每个子项目都有自己的主类。在这种情况下,sbt应该怎么做


另一种方法是将play项目定义为根/聚合,并在其中包含子项目,如play文档所示:

根项目中没有主类,只有演示项目中

在根项目中启动sbt时,必须使用以下命令:

  • 项目演示
  • 运行
等效的一行可以是:
sbt演示/运行

对于您的更新,我不知道如何做到这一点,我建议您不要这样做,而且我非常确定sbt不会为您做现成的事情

请记住,可能有许多子项目,每个子项目都有自己的主类。在这种情况下,sbt应该怎么做


另一种方法是将play项目定义为根/聚合,并在其中包含子项目,如play文档所示:

构建中的
库依赖项
行。sbt
属于
演示/构建.sbt
,也不需要
启用插件(PlayScala)
在根
build.sbt
中,就像您在
demo/build.sbt
中所做的那样(它所属的位置)。更改这些之后情况如何?根
build.sbt
中的
libraryDependencies
行属于
demo/build.sbt
,您也不需要在根
build.sbt
中启用插件(PlayScala)
,就像您在
demo/build.sbt
中所做的那样。换了这些之后情况如何?
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.