有没有办法告诉SBT使用哪个(本地)安装的JDK?
我敢肯定,我可以更改PATH
和JAVA_HOME
,但我不想更改这些设置,因为它们适用于整个系统(在这种情况下为Windows)。
我更多地是在寻找某种命令行参数。
答案 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 安装在该目录中的相同名称。