sbt.build用于多个项目和playframework

时间:2017-06-12 20:46:49

标签: playframework playframework-2.0 sbt sbt-plugin

更新

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

此reddit链接:

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

建议解决问题。虽然sbt demo/run确实执行了播放应用,但我最终只需要从根项目编译sbt run和所有项目然后运行服务器。

有人可以帮忙吗?

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

老问题:

我试图理解build.sbt是如何工作的,我不知道发生了什么。我想构建一个play项目,作为在root 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.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内并尝试build.sbt,项目就会成功编译,而我可以定期访问播放服务器。

为什么会抛出此错误?我是否需要在根SELECT users.*, role.* FROM users INNER JOIN role ON users.id_role = role.id; 中为play项目显式声明一个主类?我按照http://www.scala-sbt.org/0.13/docs/Multi-Project.html的说明操作,我只是有点迷失。任何正确方向的帮助都将受到赞赏。

供参考---

sbt版本:0.13.15

scala版本:2.11.11

播放插件版本:2.5.14

1 个答案:

答案 0 :(得分:2)

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

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

  • project demo
  • run

等效的一行可能是:sbt demo/run

对于你的更新,我不知道该怎么做,我会建议反对,而且我很确定这不是sbt会为你开箱即用的东西。

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

另一种方法是将游戏项目定义为根/聚合并在那里有子项目,如播放文档所示:https://www.playframework.com/documentation/2.5.x/SBTSubProjects#Project-structure