这是一个恼人的问题,但我需要一个scala库,用于一个只为2.12发布的大型项目。理想情况下,我会将这个库隔离到它自己的模块中,这样就不会强迫整个项目处于scala 2.12中,因为最终这个项目需要在scala3中。有没有一种方法可以让多模块sbt项目允许Scala2.12项目依赖于scala3项目,或者与不同的scala版本共存?
到目前为止,这大致是我所拥有的(下面的例子实际上使用的是2.13.8,但想法应该是相同的):
lazy val scala213 = "2.13.8"
lazy val scala212 = "2.12.15"
lazy val supportedScalaVersions = List(scala212, scala213)
val Versions =
new {
val parser = "9.0.20210312"
val catseffect = "3.3.3"
}
val commonSettings = Seq(
scalacOptions -= "-Xfatal-warnings"
)
def full(p: Project) = p % "test->test;compile->compile"
lazy val cypherparser = (project in file("modules/cypherparser"))
.settings(
scalaVersion := scala212,
crossScalaVersions := supportedScalaVersions,
libraryDependencies ++= Seq(
"org.opencypher" % "parser-9.0" % Versions.parser
)
).dependsOn(shared)
lazy val shared = (project in file("modules/shared"))
.settings(
scalaVersion := scala213,
crossScalaVersions := supportedScalaVersions,
commonSettings,
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-effect" % Versions.catseffect,
"org.typelevel" %% "munit-cats-effect-3" % "1.0.7" % Test,
)
)
lazy val root = (project in file("."))
.aggregate(shared, cypherparser)
.settings(
crossScalaVersions := Nil,
publish / skip := false
)运行上面我得到
sbt.librarymanagement.ResolveException: Error downloading shared:shared_2.12:0.1.0-SNAPSHOT发布于 2022-01-24 18:31:06
因此,在评论讨论之后,我决定交叉构建我的共享模块,这样cypherparser就可以依赖它了。但是我发现了sbt-projectmatrix插件,并使用以下方法进行了一些实验
ThisBuild / version := "0.1.0-SNAPSHOT"
lazy val scala213 = "2.13.8"
lazy val scala212 = "2.12.15"
val Versions =
new {
val parser = "9.0.20210312"
val catseffect = "3.3.3"
}
val commonSettings = Seq(
scalacOptions -= "-Xfatal-warnings"
)
def full(p: Project) = p % "test->test;compile->compile"
lazy val cypherparser = (projectMatrix in file("modules/cypherparser"))
.dependsOn(shared)
.settings(
libraryDependencies ++= Seq(
"org.opencypher" % "parser-9.0" % Versions.parser
)
)
.jvmPlatform(scalaVersions = Seq(scala212))
lazy val shared = (projectMatrix in file("modules/shared"))
.settings(
commonSettings,
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-effect" % Versions.catseffect,
"org.typelevel" %% "munit-cats-effect-3" % "1.0.7" % Test,
)
)
.jvmPlatform(scalaVersions = Seq(scala212, scala213))
lazy val root = (project in file("."))
// .aggregate(cypherparser)
.aggregate(shared.projectRefs ++ cypherparser.projectRefs: _*)
.settings(
publish / skip := false
)..。我可以像我想的那样依赖shared。神奇的是,我还可以使用不同的版本来aggregate这些模块(仍然不太确定这是如何/为什么工作的,我只是遵循了文档)。注意:您不能在设置中使用scalaVersion,否则这会破坏事情--只在platform声明中声明scala版本。
https://stackoverflow.com/questions/70837312
复制相似问题