在两个播放框架应用程序之间共享模型的最佳方式是什么?

What's the best way to share the model between two play framework application?

我有两个(可能更多)用 Play 2 编写的应用程序。4.x。 我想开始将不同的功能委托给不同的应用程序并将它们托管在不同的服务器中。现在,我的问题是这些组件中的大部分都需要共享同一个模型。 我正在使用 Ebean 和 MySQL.

有简单的方法吗?我用谷歌搜索了如何在 Play 中创建模块,但大多数结果都参考了 Play 1.x 或者没有很好的记录。

有没有办法在外部依赖中打包模型,或者有更好的方法来做到这一点?

谢谢!

有!下面将向您展示如何创建一个 sub-project、打包它、发布到您本地的 .ivy 存储库以及将它导入到父项目中。

首先创建 sub-project

  • 创建一个新的java最小java种子:

$activator new

  • 在这个新项目中添加一些通用代码到特定的包名下,例如:

project-root/src/java/main/com/mycompany/commons

  • 编辑build.sbt

    name := """mycompany-commons"""
    organization := "com.mycompany.commons"
    version := "1.0"
    scalaVersion := "2.11.6"
    libraryDependencies ++= Seq()
    
  • 在控制台中从项目根目录创建包 (jar),运行:

$activator package

此时您应该有一个可以添加到本地托管包存储库的 jar。对于这个例子,我将展示你必须将它添加到你的本地 .ivy 存储库


发布和使用 sub-project

虽然仍在 sub-project 目录中:

$activator publish-local

现在您已经将 lib 发布到本地 ivy 存储库,将新的依赖项添加到您的 父项目

  • 在 build.sbt 中将以下内容添加到 libraryDependencies:

    "com.mycompany.commons" % "mycompany-commons_2.11" % "1.0"

  • 重建你的父项目,它应该可以使用你上面创建的包中的代码

了解更多:

http://www.scala-sbt.org/0.13/tutorial/Library-Dependencies.html https://www.playframework.com/documentation/2.4.x/SBTSubProjects