采用Playframework 2.4.2的SBT 0.13.8多模块项目

时间:2015-08-03 20:24:46

标签: scala sbt multi-module playframework-2.4

我有一个带有两个子模块的简单项目,proja和projb。 Proja包含在projb中的UserControllerImpl中使用的特征UserController。

项目在github上:https://github.com/aswarcewicz/play-sbt-multimodule

root build.sbt:

name := """proj"""

version := "1.0-SNAPSHOT"

lazy val proja = Project(id = "proj-a", base = file("modules/proj-a"))
  .enablePlugins(PlayScala)

lazy val projb = Project(id = "proj-b", base = file("modules/proj-b"))
  .enablePlugins(PlayScala)
  .dependsOn(proja)
  .aggregate(proja)

lazy val root = Project(id = "proj", base = file("."))
  .enablePlugins(PlayScala)
  .dependsOn(proja, projb)
  .aggregate(proja, projb)

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

来自编译器的错误:

  

modules / proj-b / app / controllers / UserControllerImpl.scala:5:找不到:   对象控制器[错误]导入控制器._

     

/modules/proj-b/app/controllers/UserControllerImpl.scala:10:不是   found:type UserController [error]类UserControllerImpl扩展   带有UserController的控制器{

我不知道会出现什么问题。

3 个答案:

答案 0 :(得分:1)

你有一些错误。

我将提交您的项目需要在以下存储库中工作的更改。 https://github.com/martinscmb/play-sbt-multimodule

localhost:9000/test output:
{"user":{"name":"toto","age":25,"email":"toto@jmail.com","isAlive":true,"friend":{"name":"tata","age":20,"email":"tata@coldmail.com"}}}

答案 1 :(得分:0)

您应该将SBT文件更改为:

name := """proj"""

version := "1.0-SNAPSHOT"

lazy val root = Project(id = "proj", base = file("."))
  .enablePlugins(PlayScala)
  .aggregate(proja, projb)

lazy val proja = Project(id = "proj-a", base = file("modules/proj-a"))
  .enablePlugins(PlayScala)

lazy val projb = Project(id = "proj-b", base = file("modules/proj-b"))
  .enablePlugins(PlayScala)
  .dependsOn(proja)

scalaVersion := "2.11.6"

libraryDependencies ++= Seq(
)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

添加正确的依赖项并重新加载项目。

答案 2 :(得分:0)

您想要定义commonSettings模块并在任何地方传递:

import sbt.Keys._

lazy val commonSettings = Seq(
  scalaVersion := "2.11.7",
  routesGenerator := InjectedRoutesGenerator,
  version := "1.0-SNAPSHOT"
)

lazy val root = (project in file("."))
    .enablePlugins(PlayScala)
    .settings(commonSettings)
    .settings(Seq(name := """proj"""))
    .dependsOn(`proj-a`, `proj-b`)
    .aggregate(`proj-a`, `proj-b`)

lazy val `proj-b` = (project in file("modules/proj-b"))
  .enablePlugins(PlayScala)
  .settings(commonSettings)
  .dependsOn(`proj-a`).aggregate(`proj-a`)

lazy val `proj-a` = (project in file("modules/proj-a"))
  .enablePlugins(PlayScala)
  .settings(commonSettings)