这是我的项目结构。我想在运行时基于scala版本加载不同的子类。
root
-- scala-parent (ParentClass)
-- scala-2.10 (SubClassScala210)
-- scala-2.11 (SubClassScala211)
-- scala-2.12 (SubClassScala212)
Run Code Online (Sandbox Code Playgroud)
基本类在scala-parent中,而其他模块具有不同的子类。我可以针对不同版本的Scala库构建子类模块(scala-2.10 / scala-2.11 / scala-2.12)。问题是我只能再次构建scala-parent的一个特定版本的scala。
我想知道这种问题的最佳实践是什么,如何为每个scala版本构建子类?
请提供针对Maven而不是sbt的解决方案。
sbt-cross-build-dependson-example示例显示了如何交叉构建由多个子项目组成的项目,其中不同Scala版本的子项目取决于父项目。
鉴于scala-parent
项目,scala-2.11
和scala-2.12
子项目的是,接盘上,同时设置对子项目像现在这样dependsOn
scala-parent
crossScalaVersions
scala-parent
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")
Run Code Online (Sandbox Code Playgroud)
同时设定crossScalaVersions := Seq()
在root
该项目汇总其他项目:
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
)
Run Code Online (Sandbox Code Playgroud)
现在执行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 ...
Run Code Online (Sandbox Code Playgroud)
注意如何scala-parent
针对2.11和2.12进行交叉编译
> tree -d -L 1 scala-parent/target/
scala-parent/target/
??? scala-2.11
??? scala-2.12
Run Code Online (Sandbox Code Playgroud)
而子项目仅针对各自的版本而构建
> 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.12
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
160 次 |
最近记录: |