scala - 项目上的“sbt run”是否会在项目本地安装 scala 编译器、解释器和依赖项?
问题描述
如果我是正确的,Scala 通常由 sbt 为您的每个 Scala 项目安装,而不是在系统范围内安装。
我创建了一个简单的示例:
sbt new scala/hello-world.g8
当我sbt run
在 Scala sbt 项目上运行时,我看到创建了几个本地目录,例如target
.
安装什么sbt run
以及在哪里?
- 它是否在某处安装了 scala 编译器以及 scala 和字节码解释器?
- 它是否在某处安装依赖项?当 sbt 项目依赖非常大的依赖项时,例如 Spark,是否
sbt run
将它们本地安装到项目中?(考虑当有许多 Spark 应用程序时,将 Spark 本地安装到每个应用程序似乎不是一个好主意。)
谢谢。
解决方案
sbt run 是否将它们本地安装到项目中?
sbt从 1.3.0开始使用 Coursier 解决依赖关系
sbt 1.3.0+ 使用 Coursier 来实现依赖管理。直到 sbt 1.3.0,sbt 已经使用 Apache Ivy 十年了。
到本地计算机上的中央存储库。我们可以通过执行显示 Coursier 缓存目录
csrCacheDirectory
在我的机器上给出
/Users/mario_galic/Library/Caches/Coursier/v1
因此,依赖项不会按项目安装在项目本地的目录中。这些依赖项在某个项目第一次需要它时,每个版本的依赖项仅远程获取一次,然后依赖于同一版本的所有其他项目从本地缓存中获取它。
打印执行使用的完整类路径sbt run
show runtime:fullClasspath
输出类似的东西
sbt:scala-runner-classpath> show runtime:fullClasspath
[info] * Attributed(/Users/mario_galic/code/stackoverflow/scala-runner-classpath/target/scala-2.13/classes)
[info] * Attributed(/Users/mario_galic/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.1/scala-library-2.13.1.jar)