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

时间:2015-09-18 17:52:23

标签: scala playframework sbt akka

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

我认为这是可能的,但我不知道怎么做。如果有人能给我一个最小的例子,那就太棒了:)。

1 个答案:

答案 0 :(得分:1)

这里有两个选项:

如果单独设置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"切换根项目。

第二种解决方案的好处是,只要在共享项目中进行了更改,代码就会自动重新编译,但是您无法将代码拆分为多个存储库并单独进行维护。