如何为SBT设置Java版本

4

我试图运行一个Scala程序,其中Java 16存在错误。我的同事使用的是Java 15,一切正常。当我在终端输入java -version时,它显示我正在使用Java 15。但是,当我运行sbt run -v时,它说它正在使用Java 16,因此程序会抛出错误。

我看到有人谈论这个sbt-extra的东西,但是没有太多关于如何使用它的解释。我甚至没有在我的Mac上安装Java 16,所以我真的很困惑为什么SBT会这样说。


sbt 应该只使用 JAVA_HOME 上已有的内容。如果您确定没有安装 Java 16,那么它不应该使用它,因为 sbt 不会下载 JDKs - Luis Miguel Mejía Suárez
3
如果正在使用Java 16,则它肯定已经安装在某个地方了。检查您的Java安装文件夹,可以通过以下方式找到:which java。 您可以设置JAVA_HOME或使用sbt -java-home <path/to/jdk>来使用特定的JDK。 - sarveshseri
SET JAVA_HOME=C:/Program Files/Java/jdk-16.0.1 <next line> sbt - Mikhail Ionkin
4个回答

5
将以下内容添加到`~/.bash_profile`、`~/.bashrc`或`~/.zshrc`(根据Shell偏好/操作系统),或在终端中运行`sbt`之前执行以下命令:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

最好的做法是按照这个答案,通过build.sbt来处理每个sbt项目:https://dev59.com/VMHqa4cB1Zd3GeqPwEaK#76456295

2
最好的方法是通过build.sbt文件来完成,这样它只针对该项目而不是整个本地环境。即在build.sbt中添加以下内容:
  javacOptions ++= Seq("-source", "11", "-target", "11")

1
处理已安装的jvms,可以使用Jenv
安装jenv的步骤:
git clone https://github.com/jenv/jenv.git ~/.jenv
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

接下来,您可以添加已安装的JVM。在Mac上,如果您通过brew安装了它们,您可以在以下位置找到它们:/Library/Java/JavaVirtualMachines

然后将它们添加到jenv中:

jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home 
jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home 

您可以在jenv中查看可用的JVM:

jenv_versions

you can set the default jvm with the command:

jenv global 1.8.0.121

然后,在您的某些项目中执行sbt,您应该看到jvm作为sbt正在使用的jvm。


我之前不知道这个东西,它是一个很棒的工具。 - Vimit Dhawan
我想要使用jabba. 我认为这一点与jenv非常相似.. - gianluca aguzzi

1
另一种对我有效的选项是将您想要使用的Java版本添加到终端PATH环境变量的前面。由于我使用homebrew安装了openjdk,我使用了它们建议的路径,结果得到以下路径来使用openjdk 11版本。
export PATH="usr/local/opt/openjdk@11/bin:$PATH"

注意 - 我使用的openjdk路径只是homebrew符号链接到实际java安装的路径,该路径位于/Library/Java/JavaVirtualMachines。你可能可以直接使用那个实际路径,但我没有测试过。


1
我相信设置JAVA_HOME变量是更好的选择。我只是想提供这个选项,以防其他方法对某些人不起作用。 - donlja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接