【问题标题】:How to set up sbt on Windows to select a specific JDK (among available JDKs)?如何在 Windows 上设置 sbt 以选择特定的 JDK(在可用的 JDK 中)?
【发布时间】:2019-10-18 11:13:02
【问题描述】:

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

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

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

【问题讨论】:

  • 请参考stackoverflow.com/questions/7701692/…stackoverflow.com/questions/30286058/…。它们可能正是您正在寻找的。​​span>
  • @ChaitanyaWaikar 你确定这些是唯一可用的选项吗?真的没有开箱即用的命令行属性吗?我不可能是唯一遇到这种情况的开发者。
  • @ChaitanyaWaikar 补充:对我来说,提到sbt-extras 看起来它只适用于 Unix/Linux 系统,而不适用于 Windows。
  • 您只能为您当前的 shell 设置像 JAVA_HOME 这样的环境变量。您不必在系统中全局设置它。 set JAVA_HOME=c:\<java_installation_folder> 然后从同一个 shell 运行 sbt。当您关闭 shell 时,env 变量将消失,因此每次在新 shell 中运行 sbt 时都需要这样做。
  • 好的。默认情况下,SBT 使用相同的 JDK 来运行您的应用程序,因为它使用它自己。我下面的回答对你来说应该没问题...

标签: windows scala sbt


【解决方案1】:

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

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

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

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

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

jdk-8.0.212.03-hotspot

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

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

提醒一句:如果您将.java-version 提交到源代码管理,您必须确保每个人都定义了一个有效的JAVA_HOMES 环境变量,并且安装了一个与您的JDK 名称完全相同的JDK那个目录。

【讨论】:

  • 非常有趣的解决方案。没有在官方文档上找到任何参考,所以感谢您的详细回答。
  • 这似乎不被支持一般;对 windows 和 sbt.bat 是唯一的/特定的。
  • @RichardSitze:问题是“如何在 Windows 上设置 sbt...” 您可以在其他平台上使用 jenv;我刚刚解释了如何在 Windows 上指定 JDK。
  • @MikeAllen 可以理解,从标题中可以清楚地看出,并且您对 sbt.bat 的引用也暗示了这一点。这是一个非常有帮助的回应。也就是说,我通常看不到提供特定平台解决方案的工具(尽管可以说对 Windows 来说是必要的/有帮助的),并且觉得应该明确说明。
  • 这将我带到 jenv,它看起来正在工作! :)
猜你喜欢
  • 1970-01-01
  • 2014-02-21
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2011-02-28
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多