【问题标题】:Share database code between akka sbt-project and scala-play project在 akka sbt-project 和 scala-play 项目之间共享数据库代码
【发布时间】:2015-12-15 23:12:57
【问题描述】:

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

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

【问题讨论】:

  • 我认为您希望将数据库代码作为库 jar 发布到本地 Maven 存储库,然后让 sbt 为每个项目引入该依赖项。不过,我从来没有这样做过,所以你必须自己弄清楚实现。

标签: scala playframework sbt akka


【解决方案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"切换根项目。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多