You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Scala 3项目的sbt会引入scala-library-2.13至类路径?

问题:Scala 3项目类路径出现scala-library-2.13.x但依赖树不显示的原因

配置信息

build.sbt

resolvers += "Maven Central" at "https://repo1.maven.org/maven2/"
name := """Test"""
version := "1.0"
scalaVersion := "3.3.7"

project/build.properties

sbt.version=1.12.10

现象描述

执行命令sbt 'show runtime:fullClasspath'后,类路径中出现了scala-library-2.13.16:

sbt 'show runtime:fullClasspath'
[info] welcome to sbt 1.12.10 (Homebrew Java 26.0.1)
[info] loading settings for project test-build from plugins.sbt...
[info] loading project definition from .../test/project
[info] loading settings for project test from build.sbt...
[info] set current project to Test (in build file:/.../test/)
[warn] sbt 0.13 shell syntax is deprecated; use slash syntax instead: Runtime / fullClasspath
[info] * Attributed(.../test/target/scala-3.3.7/classes)
[info] * Attributed(.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-library_3/3.3.7/scala3-library_3-3.3.7.jar)
[info] * Attributed(.../.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.16/scala-library-2.13.16.jar)
[success] Total time: 0 s, completed 24. mai 2026, 23:45:52

但执行sbt dependencyTree时,该依赖并未出现在依赖树中:

# sbt dependencyTree
[info] welcome to sbt 1.12.10 (Homebrew Java 26.0.1)
[info] loading settings for project test-build from plugins.sbt...
[info] loading project definition from .../test/project
[info] loading settings for project test from build.sbt...
[info] set current project to Test (in build file:.../test/)
[info] default:test_3:1.0
[info]   +-org.scala-lang:scala3-library_3:3.3.7 [S]
[info]   
[success] Total time: 0 s, completed 24. mai 2026, 23:48:12

原因解析

这是Scala 3项目的正常现象,核心原因如下:

  • Scala 3的运行时依赖scala3-library_3本身会隐式依赖Scala 2.13版本的scala-library——因为Scala 3是基于Scala 2.13的字节码兼容层开发的,运行时需要Scala 2.13的标准库提供核心基础功能支持。
  • sbt在处理Scala 3项目时,会自动处理这个隐式依赖,将其加入运行时类路径,但不会在dependencyTree中展示。因为dependencyTree默认只显示显式声明的直接依赖和常规传递依赖,而这种由Scala版本绑定的底层依赖属于sbt/Scala构建工具的内部处理逻辑,被过滤掉了。
  • 若要验证这个隐式依赖,可以执行sbt 'show Runtime / managedClasspath',会看到scala-library-2.13.16被列为managed依赖的一部分。

内容的提问来源于stack exchange,提问作者thoredge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 04:53:13