Playframework 2.0 重头戏2-如何将项目(库)添加为依赖项
我的团队希望在Play2中重新构建我们的一个应用程序。该应用程序分为两个web应用程序,它们位于同一数据库的顶部:客户端(读)和管理员(读/写) 在新的体系结构中,我们希望构建两个Play2服务器来公开RESTAPI。将有两个单页AngularJS应用程序位于每个应用程序的前面。但这两台服务器共享相同的功能。因此,我们希望构建一个公共库,公开数据访问层(模型和DAO)。每台服务器都有自己的一组服务 客户端(REST服务器):读取Playframework 2.0 重头戏2-如何将项目(库)添加为依赖项,playframework-2.0,sbt,sbt-idea,Playframework 2.0,Sbt,Sbt Idea,我的团队希望在Play2中重新构建我们的一个应用程序。该应用程序分为两个web应用程序,它们位于同一数据库的顶部:客户端(读)和管理员(读/写) 在新的体系结构中,我们希望构建两个Play2服务器来公开RESTAPI。将有两个单页AngularJS应用程序位于每个应用程序的前面。但这两台服务器共享相同的功能。因此,我们希望构建一个公共库,公开数据访问层(模型和DAO)。每台服务器都有自己的一组服务 客户端(REST服务器):读取 客户服务 公共图书馆 管理(REST服务器):读/写(完整CR
- 客户服务
- 公共图书馆
- 行政服务
- 公共图书馆
- 我的项目
- 应用程序
- 形态
- 公开的
- 我的图书馆
- src
- 主要
- 爪哇
- 斯卡拉
- 主要
- src
- 计划
- Build.scala
- ClientPlay项目
- 应用程序
- 形态
- 公开的
- AdminPlay项目
- 应用程序
- 形态
- 公开的
- 共享图书馆
- src
- 主要
- 试验
- src
- 计划
- 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文件并导入它们;可能是依赖项对象、解析器对象等。这实际上取决于复杂性级别。我通过放弃SBT作为依赖项/构建工具解决了这个问题。我最终通过一个插件()使用了Maven。这个插件工作得很好。Maven与传统Java应用程序一样使用 我为每个“项目”(客户端、管理员、共享库)创建了三个pom.xml文件,并为父级创建了一个额外的pom.xml文件。这里没什么新鲜事。只是针对多项目依赖项的典型Maven设置
就像我说的,Play2 Maven插件工作得很好!我强烈推荐它用于涉及项目依赖关系的复杂Play2应用程序。谢谢您的回复。问题-所有这些项目都是在根项目中定义的还是完全独立的?在本例中,它们都位于根项目中;您可能能够将构建设置分发给子项目,但我不知道您将如何进行。我也有点怀疑这样做的好处;我认为最好在根项目文件夹中的多个文件中分散设置;即使在一个像Play框架本身这样大的项目中,他们也在根项目文件夹中拥有所有的定义和设置。我们计划让客户端和管理员在他们自己的服务器上(这样他们的负载不会相互影响),但会有一个共同的代码层(DAO等)。出于这个原因,当我为每个项目创建一个Play项目时,我希望有一个库,两者可以共享,以避免重复代码和版本控制问题。你是说这不可能在游戏/SBT中实现?我想知道在共享模块上创建软链接是否能解决这个问题。