如何在Windows上设置sbt以选择特定的JDK(在可用的JDK中)?

Han*_*nes 5 windows scala sbt

有没有办法告诉SBT使用哪个(本地)安装的JDK?

我敢肯定我可以更改PATHJAVA_HOME但是我宁愿不更改那些设置,因为它们适用于整个系统(在这种情况下为Windows)。

我正在寻找某种命令行参数。

Mik*_*len 5

如果要指定用于运行SBTJDK(而不是用于从SBT内部运行代码和/或测试的JDK),则可以使用环境变量以及项目中的文件。JAVA_HOMES.java-version

这在SBTsbt.bat文件中(通常安装到C:\Program Files (x86)\sbt\bin)中被描述为“可怜的人jenv”,而Windows目前尚不可用。

(如果您正在寻找适用于LinuxMacOS的类似解决方案,则可以使用SBT命令行选项,也可以使用它来jEnv指定Java主目录,但遗憾的是,它目前还没有在Windows上实现。)-java-home

JAVA_HOMES环境变量(不要与混淆JAVA_HOME)用于由SBT鉴定包含一个或多个目录JDK的安装。例如,如果您使用的是AdoptOpenJDKJDK发行版(在Windows上推荐,如果Oracle的新许可限制对您来说是一个问题),则通常将其定义为C:\Program Files\AdoptOpenJDK

假设您在目录中有两个这样的JDK安装JAVA_HOMES:一个位于名为jdk-8.0.212.03-hotspot; 的子目录中。jdk-11.0.3.7-hotspot子目录中的另一个。通过在每个SBT项目的根目录中创建一个名为的文件,可以逐个项目地选择要使用的JDK。要在子目录中使用JDK,此文件应包含:.java-versionjdk-8.0.212.03-hotspot

jdk-8.0.212.03-hotspot
Run Code Online (Sandbox Code Playgroud)

运行sbt命令时(如果已JAVA_HOMES定义),SBT.java-version在项目的根目录中查找文件。如果找到它,它将创建一个本地版本,JAVA_HOME该版本定义为JAVA_HOMES加上的最后一行.java-version。它还这增加JAVA_HOMEbin目录路径。(它还会创建一个JDK_HOME具有相同值的局部流程环境变量。)

这应该做您想要的。尽管它不是基于命令行的解决方案,但它不会对其他用户产生不利影响,并且允许每个SBT项目分别进行配置。如果您没有创建系统范围的环境变量的权限,则仍然应该能够创建用户特定的JAVA_HOMES环境变量。请注意,使用此解决方案时,在JDKSBT采用的是则不一定是你的系统范围(或特定于用户)所确定的一个JAVA_HOME环境变量。(如果尚未定义JAVA_HOMES,那么SBT会期望您已经定义了有效JAVA_HOME变量。)

一个警告:如果您承诺.java-version进行源代码管理,则必须确保每个人都定义了一个有效的JAVA_HOMES环境变量,并且在该目录中安装了具有完全相同名称的JDK