这是我的项目结构。我想在运行时加载不同的基于scala版本的子类。
root
-- scala-parent (ParentClass)
-- scala-2.10 (SubClassScala210)
-- scala-2.11 (SubClassScala211)
-- scala-2.12 (SubClassScala212)基类在scala-parent中,而其他模块有不同的子类。我可以针对不同版本的scala库构建子类模块(scala-2.10/scala-2.11/scala-2.12)。问题是我只能构建一个特定版本的scala-parent。
我想知道解决这种问题的最佳实践是什么,如何为每个scala版本构建子类?
请提供maven解决方案,而不是sbt解决方案。
发布于 2019-05-02 08:30:51
sbt-cross-build-dependson-example展示了如何cross-build包含multiple sub-projects的项目,其中不同Scala版本的子项目依赖于父项目。
给定scala-parent项目,以及scala-2.11和scala-2.12子项目,然后在scala-parent上设置crossScalaVersions,同时在子项目上设置scalaVersion,如下所示
lazy val scalaParent = (project in file("scala-parent")).settings(crossScalaVersions := Seq("2.11.0", "2.12.0"))
lazy val scala211 = (project in file("scala-2.11")).dependsOn(scalaParent).settings(scalaVersion := "2.11.0")
lazy val scala212 = (project in file("scala-2.12")).dependsOn(scalaParent).settings(scalaVersion := "2.12.0")还要在aggregates其他项目的root项目上设置crossScalaVersions := Seq():
lazy val root = (project in file("."))
.aggregate(scalaParent, scala211, scala212)
.settings(
name := "sbt-cross-build-dependson-example",
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % Test,
crossScalaVersions := Seq() // https://github.com/sbt/sbt/issues/4262#issuecomment-405607763
)现在执行sbt +compile (注意+)应该会交叉构建项目:
sbt:sbt-cross-build-dependson-example> +compile
[info] Setting Scala version to 2.12.0 on 2 projects.
...
[info] Updating scala212...
[info] Compiling 1 Scala source to /Users/mario/IdeaProjects/sbt-cross-build-dependson-example/scala-parent/target/scala-2.12/classes ...
[info] Compiling 1 Scala source to /Users/mario/IdeaProjects/sbt-cross-build-dependson-example/scala-2.12/target/scala-2.12/classes ...
...
[info] Setting Scala version to 2.11.0 on 2 projects.
...
[info] Updating scala211...
[info] Compiling 1 Scala source to /Users/mario/IdeaProjects/sbt-cross-build-dependson-example/scala-parent/target/scala-2.11/classes ...
[info] Compiling 1 Scala source to /Users/mario/IdeaProjects/sbt-cross-build-dependson-example/scala-2.11/target/scala-2.11/classes ...请注意scala-parent是如何针对2.11和2.12进行交叉编译的
> tree -d -L 1 scala-parent/target/
scala-parent/target/
├── scala-2.11
├── scala-2.12而子项目仅针对其各自版本而构建
> tree -d -L 1 scala-2.11/target/
scala-2.11/target/
├── scala-2.11
tree -d -L 1 scala-2.12/target/
scala-2.12/target/
├── scala-2.12https://stackoverflow.com/questions/55887656
复制相似问题