Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 仅交叉构建多项目sbt构建的一部分_Scala_Sbt - Fatal编程技术网

Scala 仅交叉构建多项目sbt构建的一部分

Scala 仅交叉构建多项目sbt构建的一部分,scala,sbt,Scala,Sbt,有没有一种方法可以为多项目构建的不同部分获得不同的跨scala版本?这样做的动机是我将客户机和服务器库捆绑在一个构建中。客户端库需要同时支持2.9和2.10,但我希望在服务器中使用2.10特定的库和功能 我们有一个解决办法: def forkSrcDirs(srcDirectory: File, scalaVer: String) = { val ver = scalaVer.split("\\.").take(2).mkString(".") Seq(srcDirectory / "s

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

我们有一个解决办法:

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
  )
}
def forkSrcDirs(srcDirectory:File,scalaVer:String)={
val ver=scalaVer.split(“\\”).take(2).mkString(“.”)
Seq(srcDirectory/“scala-%s”.format(版本),srcDirectory/“java-%s”.format(版本))
}
lazy val forkSourceSettings={
序号(
Build.scala中Compile中的非托管源目录:

//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”以进行真正的发布),请执行以下操作:

文件夹结构如下所示:

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

它似乎提供了您所需要的。它从单个项目定义为您所需的每个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")

我们有几个项目需要这种治疗(至少在我们处于2.9和2.10的间歇期时,这有望很快结束)。如果有内置的方式,我很想知道。你的SBT版本是什么?我正在寻找与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")