我的团队希望在Play2中重新构建我们的一个应用程序。该应用程序分为两个位于同一数据库之上的Web应用程序:客户端(读取)和 admin(读/写)。
在新架构中,我们正在寻找构建两个公开REST API的Play2服务器。将在每个应用程序前面放置两个单页AngularJS应用程序。但两台服务器共享通用功能。因此,我们希望构建一个公开的库,它将公开数据访问层(模型和DAO)。每个服务器都有自己的一组服务。
客户端(REST服务器):阅读
管理员(REST服务器):读/写(完整的CRUD)
我正在使用IntelliJ 13并且很难设置它。我已经看过以下来源:
http://www.playframework.com/documentation/2.2.1/SBTSubProjects
http://www.scala-sbt.org/release/docs/Getting-Started/Multi-Project
我相信我想要的是将库类型依赖项添加为(导入模块...),而不是将模块添加到父项目
myProject的
在MyLibrary
答案 0 :(得分:1)
由于您使用的是IntelliJ 13,因此您可以访问内置的SBT导入;遗憾的是这不能在现有项目上完成。但是,您可以从SBT Build文件导入项目,然后从.idea文件夹迁移任何项目设置(假设您使用的是基于目录的项目)。
话虽如此,听起来你也可以使用一些关于设置Build.scala的说明,所以让我们深入研究。
我将继续并假设您已经使用 play new 创建了两个Play项目。
我们想要设置这样的项目:
假设这样的布局,这是一个Build.scala可能是什么样子的例子:
import play.Project._
import sbt._
import sbt.Keys._
object BuildSettings {
val appOrganization = "com.example"
val appVersion = "0.0.1-SNAPSHOT"
val commonResolvers = Seq(
// Your common resolvers here
)
val commonSettings = Seq(
organization := appOrganization,
// Other shared settings
resolvers ++= commonResolvers
)
val commonDeps = Seq(
// Shared Dependencies for all 3 projects here.
)
val adminDeps = Seq(
// Admin dependencies
) ++ commonDeps
val clientDeps = Seq(
// Client Dependencies
) ++ commonDeps
val libraryDeps = Seq(
// Library Deps
) ++ commonDeps
}
object Build extends Build {
import BuildSettings._
lazy val LibraryProject = Project("SharedLibrary", file("SharedLibrary"))
.settings(commonSettings: _*)
.settings(libraryDependencies ++= libraryDeps)
lazy val AdminProject = play.Project("AdminPlayProject", appVersion, adminDeps, path = file("AdminPlayProject"))
.settings(commonSettings: _*)
.settings(libraryDependencies ++= adminDeps)
.dependsOn(LibraryProject)
lazy val ClientProject = play.Project("ClientPlayProject", appVersion, clientDeps, path = file("ClientPlayProject"))
.settings(commonSettings: _*)
.dependsOn(LibraryProject)
lazy val aggregatedProjects = Seq[ProjectReference](
LibraryProject,
AdminProject,
ClientProject
)
lazy val root = Project("Root", file("."))
.settings(commonSettings: _*)
.aggregate(aggregatedProjects: _*)
}
只要你的Build.scala全部平方,只需在IntelliJ中执行导入项目步骤,它就会让你的代码完成所有平方并且很好。
作为一个注释,您可能希望将其中的部分内容分解为其他.scala文件并导入它们;可能是Dependencies对象,Resolvers对象等。它实际上取决于复杂程度。
答案 1 :(得分:0)
我通过放弃SBT作为我的依赖/构建工具解决了这个问题。我最终通过插件(http://nanoko-project.github.io/maven-play2-plugin/maven/release/index.html)使用Maven。该插件效果很好。 Maven用于传统的Java应用程序。
我为每个“项目”(客户端,管理员,共享库)创建了三个pom.xml文件,并为父项创建了一个额外的pom.xml。这里没什么新鲜的。只是您对多项目依赖项的典型Maven设置。
就像我说的,Play2 Maven插件效果很好!我强烈推荐它用于涉及项目依赖性的复杂Play2应用程序。