2017-06-12 21 views
0

更新:sbt.build为多个项目和playframework

所以,我想了解的问题是,为什么我不能在根文件夹中build.sbt。即使我在build.sbt文件夹中定义了lazy val root = ...,也找不到主类。

这个reddit的链接:

https://www.reddit.com/r/scala/comments/4igc9x/sbt_playframework_no_main_class_detected/

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

任何人都可以在这里帮忙吗?

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

老问题:

我想了解如何build.sbt工作的,我不知道这是怎么回事上。我想建立一个play项目作为一个根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) 

我的根project/定义addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.14")plugins.sbt

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,项目编译成功,我可以访问常规w中的播放服务器唉。

为什么这个错误被抛出?我是否需要明确声明根目录build.sbt中的播放项目的主类?我遵循http://www.scala-sbt.org/0.13/docs/Multi-Project.html的指示,我只是有点迷路。任何帮助在正确的方向将不胜感激。

仅供参考---

SBT版本:0.13.15

阶版本:2.11.11

播放插件版本:2.5.14

+0

的'从根'build.sbt'属于libraryDependencies'线到'demo/build.sbt',你也不需要在'build.sbt'根目录下'.enablePlugins(PlayScala)',因为你已经在'demo/build.sbt'(它所属的地方)做过了。改变这些后怎么样? –

回答

2

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

根项目时启动SBT,你必须使用下面的命令:

  • project demo
  • run

相当于一个行可能是:sbt demo/run

对你的更新,我不知道该怎么做,我会建议反对,而且我很确定这不是什么问题。我为你开箱。

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

另一种方法是定义游戏项目为根/骨料和具有子项目有,如图所示它播放DOC:https://www.playframework.com/documentation/2.5.x/SBTSubProjects#Project-structure