我正在将应用程序升级到scala 2.12版本。该应用程序使用的库是由另一个团队在scala 2.11中开发的。
这是我更新的文件build.sbt的代码。它正在使用库"sdp-commons-monitoring_2.11">
import com.typesafe.sbt.SbtNativePackager.autoImport.NativePackagerHelper._
import sbt.{Artifact, Credentials, Defaults, Level, addArtifact}
lazy val commonSettings = Seq(
scalaVersion := "2.12.15",
organization := "com.pi.isg.ingest"
)
name := "ingest-tool"
libraryDependencies += "com.pi.isg.sdp-commons" % "sdp-commons-monitoring_2.11" % "11.1.9" excludeAll(
ExclusionRule(organization = "org.json4s"),
ExclusionRule(organization = "org.scala-lang"),
ExclusionRule(organization = "io.spray"),
ExclusionRule(organization = "org.slf4j"),
ExclusionRule(organization = "ch.qos.logback"),
ExclusionRule(organization = "com.amazonaws"),
ExclusionRule(organization = "com.typesafe.akka"),
ExclusionRule(organization = "com.fieldstreams.dispatcher"),
ExclusionRule(organization = "com.pi.fieldstreams.persistence"),
ExclusionRule(organization = "com.pi.isg.sdp-commons", name = "sdp-commons-common-persistence_2.11"),
ExclusionRule(organization = "com.pi.isg.sdp-commons", name = "sdp-commons-serialization_2.11")
)
运行应用程序时,抛出错误"java.lang。没有classdeffoundererror: scala/Product$class sbt。ForkMain$ForkError: java.lang.NoClassDefFoundError: scala/Product$class"似乎是兼容版本的问题。有没有办法配置在构建。SBT所以我的应用程序运行scala 2.12版本和lib与scala 2.11版本?
目前,开发该库的团队没有计划将他们的库升级到新版本。
问候,
在注释中提到:Scala 2次要版本("minor"在通用服务器中使用:major.minor.patch
)不兼容二进制.
例如,用Scala 2.11编译的库不能在Scala 2.12项目中使用。
从Scala 3开始改变:
- 用Scala 2.13编译的库可以在Scala 3项目中使用,反之亦然,除了使用宏的库
- Scala 3小版本向后二进制兼容(3.1项目可以使用3.0库,但还不能使用相反的库,尽管这种情况正在逐步改变,未来可能会实现前向兼容)。
查看更多文档:
- https://docs.scala-lang.org/scala3/reference/language-versions/binary-compatibility.html
- https://contributors.scala-lang.org/t/improving-scala-3-forward-compatibility/5298