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



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

我认为这是可能的,但我不知道如何。如果有人能给我提供一个最小的例子,那将是伟大的:)。

这里有两个选项:

如果你分别设置了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"切换根项目。

第二个解决方案的好处是,每当在共享项目中进行更改时,代码将自动重新编译,但是您不能将代码拆分到几个存储库中并分别维护它们。

最新更新