Gradle 8.13搭配Scala 2.12.15与Zinc兼容问题求助
解决方案
1. 选对和Scala 2.12兼容的Zinc版本
Zinc从1.10.x版本开始就基于Scala 2.13构建了,完全不支持Scala 2.12。你得降级到1.9.x系列的Zinc版本,而且要用专门针对Scala 2.12编译的artifactId(zinc_2.12),别再用旧的com.typesafe.zinc:zinc了。
2. 修正Gradle依赖配置
把原来的Zinc依赖换成下面的配置:
dependencies { zinc "org.scala-sbt:zinc_2.12:1.9.6" // 强制统一Scala库版本为2.12.15 zinc platform("org.scala-lang:scala-platform:2.12.15") zinc "org.scala-lang:scala-library:2.12.15" zinc "org.scala-lang:scala-compiler:2.12.15" }
要是想更严格控制版本,也能手动排除Zinc自带的Scala依赖,再强制指定自己的版本:
dependencies { zinc ("org.scala-sbt:zinc_2.12:1.9.6") { exclude group: "org.scala-lang", module: "scala-library" exclude group: "org.scala-lang", module: "scala-compiler" } zinc "org.scala-lang:scala-library:2.12.15", { force = true } zinc "org.scala-lang:scala-compiler:2.12.15", { force = true } }
3. 检查依赖是否一致
跑一下Gradle的依赖分析命令,确保没有Scala 2.13的依赖混进来:
./gradlew dependencies --configuration zinc
看输出里所有Scala相关的依赖版本是不是都是2.12.15,别出现2.13的版本。
为啥原来的配置会报错?
- 第一个错误:
zinc_2.13:1.10.4是用Scala 2.13编译的,Scala跨大版本(2.12→2.13)二进制不兼容,自然和你的2.12.15搭不上。 - 第二个错误:你排除了Zinc自带的Scala库,但Zinc 1.10.8的代码是基于Scala 2.13写的,调用了Scala 2.13特有的
scala.collection.mutable.ArraySeq方法,而Scala 2.12里的这个类根本没这些方法,所以就报NoSuchMethodError了。
内容的提问来源于stack exchange,提问作者Franek
相关产品推荐
相关产品推荐

