Scala项目SBT构建时scala-parser-combinators二进制版本冲突求助
解决Play 2.8.18与scala-parser-combinators版本冲突的二进制兼容问题
问题核心
Play 2.8.18明确依赖org.scala-lang.modules:scala-parser-combinators_2.13:1.1.2,但项目中被依赖解析器选中了2.1.0版本,导致二进制不兼容。以下是三种可行的解决方法:
方法1:强制统一依赖版本(最快捷)
在build.sbt中添加dependencyOverrides配置,强制所有依赖树使用Play要求的1.1.2版本:
dependencyOverrides += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2"
该配置会覆盖所有依赖的版本声明,确保整个项目使用一致的parser-combinators版本,彻底消除冲突。
方法2:排查并排除冲突依赖源
先执行sbt dependencyTree命令,输出完整的依赖树,定位到引入2.1.0版本的依赖(通常是ScalikeJDBC或其附属模块)。找到后,在对应的依赖声明中排除该模块:
例如,如果是ScalikeJDBC核心库引入的冲突,修改依赖为:
libraryDependencies += "org.scalikejdbc" %% "scalikejdbc" % "你的ScalikeJDBC版本" exclude("org.scala-lang.modules", "scala-parser-combinators_2.13")
这样就能阻止该依赖拉取高版本的parser-combinators,转而使用Play提供的1.1.2版本。
方法3:避免随意升级依赖(重要提示)
不要尝试手动升级Play依赖的parser-combinators版本到2.1.0,Play 2.8.x的内部实现基于1.1.2版本的API开发,高版本可能存在API变更,导致运行时抛出NoSuchMethodError或ClassNotFoundException等错误。
内容的提问来源于stack exchange,提问作者Krishna Gaurav
相关产品推荐
相关产品推荐

