如何从Scala 3项目中移除scala-library.jar依赖
解决Scala3项目中出现Scala2依赖及
scala.Predef$找不到的问题 先定位Scala2依赖的来源
执行sbt show Runtime / managedClasspath,查看输出的完整依赖列表——哪怕dependencyTree没显示,这个命令能直接列出所有参与构建的依赖,帮你揪出是哪个插件或隐式依赖带进来的scala-library-2.13.15.jar。
强制排除Scala2依赖
在build.sbt里添加全局排除规则,彻底移除Scala2版本的scala-library:
// 全局排除所有scala-library(Scala2版本)依赖 excludeDependencies += "org.scala-lang" % "scala-library" // 若全局排除有冲突,可给每个依赖单独排除 libraryDependencies ~= { deps => deps.map(_.exclude("org.scala-lang", "scala-library")) }
检查SBT插件兼容性
部分SBT插件(如打包类插件)可能默认依赖Scala2版本,去project/plugins.sbt确认所有插件版本兼容Scala3:
- 比如
sbt-assembly要使用0.15.0及以上版本; sbt-native-packager需用1.9.0+版本;- 插件声明不要带Scala2后缀(比如
_2.13),让SBT自动适配当前Scala3版本。
清理SBT缓存
旧缓存可能残留Scala2依赖,执行以下操作彻底清理后重新构建:
sbt clean # 删除本地缓存目录 rm -rf ~/.sbt ~/.ivy2/cache ~/.coursier/cache
确认编译配置无兼容问题
确保build.sbt里的Scala版本配置完全指向Scala3:
scalaVersion := "3.6.3" // 移除包含Scala2版本的crossScalaVersions配置 autoScalaLibrary := false // 显式添加Scala3库依赖 libraryDependencies += "org.scala-lang" %% "scala3-library" % scalaVersion.value
关于scala.Predef$找不到的问题
Scala3的scala3-library本身包含兼容用的scala.Predef$对象,出现这个错误大概率是编译时混入了Scala2类路径,或运行时缺少正确的Scala3库。解决上述依赖问题后,重新编译打包,确保target/libs里只有scala3-library_3-3.6.3.jar,再用java -jar启动即可。
内容的提问来源于stack exchange,提问作者Anton Feoktistov
相关产品推荐
相关产品推荐

