玩子项目路线

时间:2017-02-14 13:23:54

标签: playframework routing playframework-2.5 playframework-routing

我玩了! 2.5.3项目有一个子项目(有自己的路线)。在主路径文件中,子项目的路由定义如下:

->        /api                         api.Routes
GET       /assets/*file                controllers.Assets.at(path="/public", file)

api.routes文件如下:

GET      /v1/permissions/roles         controllers.api.PermissionsController.roles

因此获取角色的网址为/api/v1/permissions/roles

当我运行根项目(取决于两个子项目)时,一切正常,但是当单独运行每个子项目时,找不到路径。我尝试在构建期间将主路由文件复制到已构建子项目的conf文件夹,但它不起作用。

我找到的唯一解决方案是在play.http.router = "api.Routes"中添加application.conf,但路由“丢失”其/api前缀(即:api路由为/v1/permissions/roles

所以我的问题是:是否可以有一个带有路径的子项目,这些路由在运行根项目时和单独运行每个子项目时是一样的吗?

如果有可能,它是否在文档中的任何位置?

修改

build.sbt用于根项目

name := """abc"""
version := "0.1.0"
scalaVersion := "2.11.7"

resolvers += Resolver.jcenterRepo
javaOptions in Test += "-Dconfig.file=conf/test.conf"
javaOptions in Test += "-Dtest.timeout=600000"


lazy val abcCore = (project in file("modules/abc-core")).enablePlugins(PlayJava, PlayEbean)

lazy val abcCentral = (project in file("modules/abc-central")).enablePlugins(PlayJava, PlayEbean)
    .dependsOn(abcCore)
    .aggregate(abcCore)

lazy val abcSimulador = (project in file("modules/abc-simulador")).enablePlugins(PlayJava, PlayEbean)
    .dependsOn(abcCore)
    .aggregate(abcCore)


lazy val abcDevice = (project in file("modules/abc-device")).enablePlugins(PlayJava, PlayEbean)
    .dependsOn(abcCore)
    .aggregate(abcCore)

lazy val abcApi = (project in file("modules/abc-api")).enablePlugins(PlayJava, PlayEbean)
    .dependsOn(abcCore, abcSimulador)
    .aggregate(abcCore, abcSimulador)

lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean)
    .dependsOn(abcCore, abcDevice, abcCentral, abcSimulador, abcApi)
    .aggregate(abcCore, abcDevice, abcCentral, abcSimulador, abcApi)


libraryDependencies ++= Seq(
    javaJdbc,
    cache,
    javaWs,
    "uk.co.panaxiom" %% "play-jongo" % "2.0.0-jongo1.3",
    "be.objectify" %% "deadbolt-java" % "2.5.0",
    "mysql" % "mysql-connector-java" % "5.1.36",
    "org.hibernate" % "hibernate-validator" % "5.2.4.Final",
    "com.fasterxml.jackson.datatype" % "jackson-datatype-joda" % "2.7.5",
    "uk.co.modular-it" % "bean-utils" % "0.9.10",
    "org.hamcrest" % "hamcrest-library" % "1.3",
    "commons-beanutils" % "commons-beanutils" % "1.9.2",
    "net.coobird" % "thumbnailator" % "0.4.8",
    "io.moquette" % "moquette-broker" % "0.8.1" exclude("org.slf4j", "slf4j-log4j12"),
    "org.mindrot" % "jbcrypt" % "0.3m",
    "org.apache.commons" % "commons-math3" % "3.6.1",
    "com.typesafe.play" %% "play-mailer" % "5.0.0",
    "org.thymeleaf" % "thymeleaf" % "3.0.1.RELEASE",
    "org.jetbrains.kotlin" % "kotlin-stdlib" % "1.0.3",
    "org.eclipse.collections" % "eclipse-collections-api" % "7.1.0",
    "org.eclipse.collections" % "eclipse-collections" % "7.1.0",
    "org.eclipse.collections" % "eclipse-collections-forkjoin" % "7.1.0",
    "net.jpountz.lz4" % "lz4" % "1.3.0",
    "org.mapdb" % "elsa" % "3.0.0-M6",
    "com.google.guava" % "guava" % "19.0",
    "org.jfree" % "jfreesvg" % "3.1",
    "net.sf.jasperreports" % "jasperreports" % "6.3.1",
    "com.github.jhonnymertz" % "java-wkhtmltopdf-wrapper" % "1.0.1-RELEASE",
    "org.awaitility" % "awaitility-scala" % "2.0.0",
    "org.fusesource.mqtt-client" % "mqtt-client" % "1.14")


jacoco.settings
parallelExecution in jacoco.Config := false
jacoco.reportFormats in jacoco.Config := Seq(
    de.johoop.jacoco4sbt.ScalaHTMLReport(encoding = "utf-8", withBranchCoverage = true),
    de.johoop.jacoco4sbt.XMLReport(encoding = "utf-8"))


fork in run := false
fork in Test := false



mappings in Universal <++= (packageBin in Compile) map { jar =>
    val scriptsDir = new java.io.File("modules/abc-api/app/templates/")
    scriptsDir.listFiles.toSeq.map { f =>
        f -> ("app/templates/" + f.getName)
    }
}

mappings in Universal <++= (packageBin in Compile) map { jar =>
    val scriptsDir = new java.io.File("modules/abc-api/public/images/")
    scriptsDir.listFiles.toSeq.map { f =>
        f -> ("public/images/" + f.getName)
    }
}

1 个答案:

答案 0 :(得分:0)

我认为你不能这样做,项目是二进制绑定的,我的意思是所有模块jar都必须在类路径中(根据build.sbt)。您无法单独运行它们。

我希望你所看到的是微服务类的东西。如果是这样,您需要了解微服务带来的成本。一旦你决定使用微服务,你可以看一下Lagom Framework(https://www.lightbend.com/lagom