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

时间:2019-06-02 19:19:15

标签: windows scala sbt

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

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

我更多地是在寻找某种命令行参数。

1 个答案:

答案 0 :(得分:4)

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

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

((如果您正在寻找针对 Linux MacOS 的类似解决方案,则可以使用jEnv或指定 Java < / em>主目录通过-java-home SBT 命令行选项-遗憾的是,当前还没有在 Windows 上实现。)

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

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

sbt

运行JAVA_HOMES命令时,如果已定义.java-version,则 SBT 将在项目的根目录中查找JAVA_HOME文件。如果找到它,它将创建JAVA_HOMES的本地版本,该版本定义为.java-version加上JAVA_HOME的最后一行。还将此bin的{​​{1}}目录添加到路径。 (它还会创建一个具有相同值的JDK_HOME进程本地环境变量。)

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

一个警告:如果您将.java-version提交给源代码管理,则必须确保每个人都定义了一个有效的JAVA_HOMES环境变量,并且必须有一个准确的 JDK 安装在该目录中的相同名称。