sbt.build 用于多个项目和 playframework
sbt.build for multiple projects and playframework
更新:
所以,我想了解的问题是为什么我不能在根文件夹中包含 build.sbt
。即使我在根build.sbt
文件夹中定义了一个lazy val root = ...
,也找不到主要的class。
这个 reddit link:
https://www.reddit.com/r/scala/comments/4igc9x/sbt_playframework_no_main_class_detected/
提出问题的解决方案。虽然 sbt demo/run
确实执行了 play 应用程序,但我最终只想从根项目编译 sbt run
和所有项目,然后 运行 服务器。
有人可以帮忙吗?
============================================= ====================
老问题:
我正在尝试了解 build.sbt 的工作原理,但我不确定发生了什么。我想构建一个游戏项目作为在根 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/
的 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.
但是 如果我将根 build.sbt
和根 project/
放在 demo/
中并尝试 sbt run
,项目编译成功,可以正常访问播放服务器
为什么会抛出这个错误?我是否需要在根 build.sbt
中为播放项目显式声明一个 main class?我正在按照 http://www.scala-sbt.org/0.13/docs/Multi-Project.html 上的说明进行操作,但我有点迷路了。任何正确方向的帮助将不胜感激。
供参考---
sbt 版本:0.13.15
scala 版本:2.11.11
播放插件版本:2.5.14
根项目中没有mainclass,只有demo项目中
在根项目中启动sbt时,必须使用以下命令:
project demo
run
等价的一行可能是:sbt demo/run
对于您的更新,我不知道该怎么做,我不建议这样做,而且我很确定这不是 sbt 会立即为您做的事情。
请记住,可能有很多子项目,每个子项目都有自己的主要项目-class(es)。在这种情况下,sbt 应该怎么做?
另一种方法是将播放项目定义为 root/aggregate 并在那里设置子项目,如播放文档所示:https://www.playframework.com/documentation/2.5.x/SBTSubProjects#Project-structure
更新:
所以,我想了解的问题是为什么我不能在根文件夹中包含 build.sbt
。即使我在根build.sbt
文件夹中定义了一个lazy val root = ...
,也找不到主要的class。
这个 reddit link:
https://www.reddit.com/r/scala/comments/4igc9x/sbt_playframework_no_main_class_detected/
提出问题的解决方案。虽然 sbt demo/run
确实执行了 play 应用程序,但我最终只想从根项目编译 sbt run
和所有项目,然后 运行 服务器。
有人可以帮忙吗?
============================================= ====================
老问题:
我正在尝试了解 build.sbt 的工作原理,但我不确定发生了什么。我想构建一个游戏项目作为在根 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/
的 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.
但是 如果我将根 build.sbt
和根 project/
放在 demo/
中并尝试 sbt run
,项目编译成功,可以正常访问播放服务器
为什么会抛出这个错误?我是否需要在根 build.sbt
中为播放项目显式声明一个 main class?我正在按照 http://www.scala-sbt.org/0.13/docs/Multi-Project.html 上的说明进行操作,但我有点迷路了。任何正确方向的帮助将不胜感激。
供参考---
sbt 版本:0.13.15
scala 版本:2.11.11
播放插件版本:2.5.14
根项目中没有mainclass,只有demo项目中
在根项目中启动sbt时,必须使用以下命令:
project demo
run
等价的一行可能是:sbt demo/run
对于您的更新,我不知道该怎么做,我不建议这样做,而且我很确定这不是 sbt 会立即为您做的事情。
请记住,可能有很多子项目,每个子项目都有自己的主要项目-class(es)。在这种情况下,sbt 应该怎么做?
另一种方法是将播放项目定义为 root/aggregate 并在那里设置子项目,如播放文档所示:https://www.playframework.com/documentation/2.5.x/SBTSubProjects#Project-structure