在 akka sbt-project 和 scala-play 项目之间共享数据库代码

Share database code between akka sbt-project and scala-play project

我想让我的数据库代码可以从我的 akka 项目和我的 scala-play 项目访问。我希望这样做的方式是,当我更改数据库代码并进行编译时,两个项目都可以直接访问编译结果。

我认为这可以通过 sbt 实现,但我不知道如何实现。如果有人能给我提供一个最小的例子,那就太好了:)。

这里有两个选项:

如果您分别设置 akka 项目和 scala-play 项目,则需要设置第三个项目(可能使用模板 "min-scala"),并将该项目发布到存储库中。在这个新项目中,你需要设置发布到哪里,还要明确定义项目名称、组织和版本号。你可能会喜欢这个

name := """my-database-lib"""
organization := "org.my.project"
version := "1.0-SNAPSHOT"
scalaVersion := "2.11.6"
publishTo := Some("Nexus" at "http://nexus.myrepo.com:8081/nexus/content/repositories/play-snapshot/")

然后你可以将这一行添加到你的 play 和 akka 项目中以引用它:

libraryDependencies += "org.my.project" %% "my-database-lib" % "1.0-SNAPSHOT"

您需要 运行 activator publish 共享项目才能将库上传到存储库。如果您没有共享存储库,您可以跳过 publishTo 配置并使用 activator publishLocal 仅在您的计算机上发布您的共享库。

第二种解决方案是将所有三个项目定义为一个构建,方法是将其他项目放入一个项目的模块文件夹中。您可以像这样在一个 sbt 中将多个项目定义为模块:

lazy val playProject = (project in file(".")).enablePlugins(PlayJava)
.dependsOn(databaseLib).aggregate(databaseLib)

lazy val akkaProject = (project in file("modules/akka"))
.dependsOn(databaseLib)..aggregate(databaseLib)

lazy val databaseLib = (project in file("modules/database"))

然后可以使用activator projects列出所有项目,使用activator "project akkaProject"切换根项目。

第二种解决方案的好处是只要共享项目发生更改,代码就会自动重新编译,但您不能将代码拆分到多个存储库中并分别维护它们。