从一些在线资源自学Scala和SBT。困难之一是将工具链、IDE(尝试intellij)和学习语言的不同概念分离开来。为什么SBT显示的scalaVersion与系统显示的版本不同?是否与我的代码如何编译有关?以下是控制台输出。
della@dell-xps ~/s/l/sbt-testing> scala --version
Scala code runner version 3.2.2 -- Copyright 2002-2023, LAMP/EPFL
della@dell-xps ~/s/l/sbt-testing> scalac --version
Scala compiler version 3.2.2 -- Copyright 2002-2023, LAMP/EPFL
della@dell-xps ~/s/l/sbt-testing> sbt
[info] welcome to sbt 1.8.2 (Ubuntu Java 11.0.17)
[info] loading project definition from /home/della/supply-chain-dev/learning_projects/sbt-testing/project
[info] set current project to sbt-testing (in build file:/home/della/supply-chain-dev/learning_projects/sbt-testing/)
[info] sbt server started at local:///home/della/.sbt/1.0/server/0b33882a8fc31214bc13/sock
[info] started sbt server
sbt:sbt-testing> scalaVersion
[info] 2.12.17
sbt:sbt-testing> ^D
della@dell-xps ~/s/l/sbt-testing> sbt --version
sbt version in this project: 1.8.2
sbt script version: 1.8.2
如何处理这个问题?我在哪里读到scala 2和3不兼容,那么这对我的代码有什么影响呢?我的代码与scala 3兼容,但与scala 2不兼容?还有,如何从我的系统中删除所有scala 2的痕迹,并强制sbt使用系统版本的scala?
如果重要的话,操作系统是Ubuntu 22.04。
1条答案
按热度按时间qvtsj1bj1#
通常情况下,系统中安装的Scala版本是无关紧要的,如果只安装了Java和sbt,则可以根本不安装Scala,仍然可以使用sbt运行Scala。
启动repl(命令
scala
)时,运行的是系统中安装的Scala,关于IntelliJ,可以查看File -〉Project Structure。在sbt中,你在构建文件(
build.sbt
)中指定Scala版本(scalaVersion := ...
)。这是用于构建项目的Scala版本。如果sbt需要,它将下载必要的Scala版本。项目的不同子项目可以使用不同版本的Scala进行构建/交叉构建。
如果你没有在
build.sbt
中指定Scala版本,默认情况下sbt使用它构建时使用的Scala版本,比如Scala 2.12.x。另外,如何从我的系统中删除scala 2的所有痕迹
只有你知道如何完全回滚安装它的步骤。你可以尝试运行
which scala
,which scalac
来查看它的位置。你可以删除目录。你也可以查看PATH
和SCALA_HOME
变量(echo $PATH
,echo $SCALA_HOME
)并删除Scala部分。强制sbt使用系统scala版本?
你不应该这样做。你可以在构建文件中指定任何你需要的Scala版本。同样,当你克隆/下载别人的项目时,它应该使用指定的Scala版本运行。
原则上你可以这么做
https://www.scala-sbt.org/1.x/docs/Local-Scala.html
https://www.scala-sbt.org/1.x/docs/Configuring-Scala.html
https://www.scala-sbt.org/1.x/docs/Howto-Scala.html
我在哪里读到scala 2和3不兼容
是的,Scala 2和Scala 3是不同的。例如
type T = List[Option[A]] forSome {type A}
在Scala 2中编译而不是Scala 3,type T = [A] =>> [B] =>> (A, B)
在Scala 3中编译而不是Scala 2。http://dotty.epfl.ch/docs/reference/other-new-features/index.html
http://dotty.epfl.ch/docs/reference/changed-features/index.html
http://dotty.epfl.ch/docs/reference/dropped-features/index.html
但是还有Scala 2.13 - Scala 3互操作
https://docs.scala-lang.org/scala3/guides/migration/compatibility-intro.html
您可以看到在Scala Spark Encoders.product[X] (where X is a case class) keeps giving me "No TypeTag available for X" error中同时使用Scala 2.13和Scala 3的项目示例
Which version of SBT ? scala2.13.3
关于sbt及其运行方式:SBT gives java.lang.NullPointerException when trying to run spark
How can I check the SBT version?