【问题标题】:SBT 0.13.8 multi module project with Playframework 2.4.2带有 Playframework 2.4.2 的 SBT 0.13.8 多模块项目
【发布时间】:2015-08-03 20:24:45
【问题描述】:

我有一个包含两个子模块 proja 和 projb 的简单项目。 Proja 包含在 projb 内的 UserControllerImpl 中使用的 trait 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: 不是 发现: type UserController [error] class UserControllerImpl extends 带有 UserController {

的控制器

我不知道哪里出了问题。

【问题讨论】:

    标签: scala sbt multi-module playframework-2.4


    【解决方案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"}}}
    

    【讨论】:

      【解决方案2】:

      您应该将您的 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
      

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

      【讨论】:

      • 你在 github 的项目上试过了吗?因为它不起作用。
      • 您的 SBT 文件语法错误,现在您可以添加所需的依赖项
      • 你不再需要每个项目都有一个 sbt 文件
      【解决方案3】:

      你想定义一个 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)
      

      【讨论】:

        猜你喜欢
        • 2016-01-22
        • 1970-01-01
        • 2018-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-10
        • 1970-01-01
        • 2021-12-02
        相关资源
        最近更新 更多