繁体   English   中英

交叉构建一些多项目的sbt构建

[英]Cross-building only some of a multi-project sbt build

有没有办法让我可以为多项目构建的不同部分获得不同的跨scala版本? 这样做的动机是我将客户端和服务器库捆绑在一个版本中。 客户端库需要支持2.9和2.10,但我想在服务器中使用2.10特定的库和功能。

我们有一个hacky解决方法:

def forkSrcDirs(srcDirectory: File, scalaVer: String) = {
  val ver = scalaVer.split("\\.").take(2).mkString(".")
  Seq(srcDirectory / "scala-%s".format(ver), srcDirectory / "java-%s".format(ver))
}

lazy val forkSourceSettings = {
  seq(
    unmanagedSourceDirectories in Compile <++= (sourceDirectory in Compile, scalaVersion) apply forkSrcDirs,
    unmanagedSourceDirectories in Test <++= (sourceDirectory in Test, scalaVersion) apply forkSrcDirs
  )
}

这让我们通过在server / src / main / scala-2.10中包含所有代码来实现目标,但似乎这应该是我们可以直接使用SBT设置完成的事情。

看起来sbt-cross插件提供了你所需要的东西。 它从单个项目定义为您需要的每个scala版本生成一个sbt项目。

在project / plugins.sbt中,添加

resolvers += Resolver.sonatypeRepo("releases")

addSbtPlugin("com.lucidchart" % "sbt-cross" % "1.1")

对于您给定的结构,您的build.sbt应该是这样的

lazy val root = (project in file("."))
  .aggregate(server, client_2_9, client_2_10)

lazy val server = (project in file("server"))
  .settings(
    scalaVersion := "2.10.6"
  )

lazy val client = (project in file("client"))
  .cross

lazy val client_2_9 = client("2.9.3")
lazy val client_2_10 = client("2.10.6")

在你的Build.scala中:

//maybe you need to set your preferred scalaVersion
import sbt._
import Keys._

object HelloBuild extends Build {
    lazy val root = Project(id = "main",
                            base = file(".")) aggregate(client, server)

    lazy val client = Project(id = "client", base = file("client")).settings(crossScalaVersions := Seq("2.9.2", "2.10.0"))

    lazy val server = Project(id = "server", base = file("server"))
}

要发布 - 本地(删除“-local”用于实际发布“):

sbt "server/publish-local" "project client" "+ publish-local"

文件夹结构如下所示:

.
├── client
│   └── src
│       └── main
│           └── scala
│               └── Client.scala
├── project
│   └── Build.scala
└── server
    └── src
        └── main
            └── scala
                └── Server.scala

链接:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM