sbt 无法正确安装;自制程序更改 java 个版本

sbt won't install correctly; homebrew changing java versions

我刚刚进行了全新安装。 jdk 8(来自 adoptium.net)和 sbt(使用自制软件)在新成像的 mac 书中。无论如何,自制软件使用了 java 18,而 sbt 不起作用。

我按照此处的说明操作:https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Mac.html

在该页面上的 link 之后到 adoptium.net,我找到了 mac os.

唯一的 jdk 8
$ java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (Temurin)(build 25.322-b06, mixed mode)

按照 sbt 页面上的说明,我使用了 homebrew...

$ brew install sbt

当我检查版本时,我看到了一个问题...

$ sbt about
[info] welcome to sbt 1.6.2 (Homebrew Java 18)
[info] loading project definition from /Users/KHinson1/project
[info] set current project to khinson1 (in build file:/Users/KHinson1/)
[info] This is sbt 1.6.2
[info] The current project is ProjectRef(uri("file:/Users/KHinson1/"), "khinson1") 0.1.0-SNAPSHOT
[info] The current project is built against Scala 2.12.15

Homebrew 使用 java 18 安装它?!如何清理它并使用我安装的 java 8?我在笔记本电脑上找不到 java 18。

我立即 运行 尝试用 sbt assembly...

编译一个 fat jar 时遇到问题
java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release
  at java.base/java.lang.System.setSecurityManager(System.java:416)
  at sbt.TrapExit$.installManager(TrapExit.scala:52)
  at sbt.StandardMain$.runManaged(Main.scala:52)
  at sbt.xMain.run(Main.scala:28)
  at xsbt.boot.Launch$.$anonfun$run(Launch.scala:149)
  at xsbt.boot.Launch$.withContextLoader(Launch.scala:176)
  at xsbt.boot.Launch$.run(Launch.scala:149)
  at xsbt.boot.Launch$.$anonfun$apply(Launch.scala:44)
  at xsbt.boot.Launch$.launch(Launch.scala:159)
  at xsbt.boot.Launch$.apply(Launch.scala:44)
  at xsbt.boot.Launch$.apply(Launch.scala:21)
  at xsbt.boot.Boot$.runImpl(Boot.scala:78)
  at xsbt.boot.Boot$.run(Boot.scala:73)
  at xsbt.boot.Boot$.main(Boot.scala:21)
  at xsbt.boot.Boot.main(Boot.scala)
[error] [launcher] error during sbt launcher: java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release

我知道这是一个 java 17+ 问题,来自这样的问题...

我过去曾使用自制软件来安装 sbt,但老实说我是 macs 的新手,不明白它是如何在我没有安装时使用 java 18 java18.

如何让 java 18 完全脱离我的 machine(我什至找不到它)并按预期使用 java 8 安装 sbt?

谢谢。

编辑

我试过使用 jenv,如下所述:

我点开jdk我安装

$ which java
/usr/bin/java

但是当我尝试

$ jenv add /usr/bin/java
/usr/bin/java is not a valid path to java installation

(edit 我已经竭尽全力尝试 SDKMAN,但我想知道我是否应该直接指向 /Library/Java/JavaVirtualMachines/temurin_????)

我尝试使用 brew install sbt@0.13,它列出了 jdk 8 作为它的依赖项,但它只是不起作用(“找不到命令”)。我想要一个更新的 sbt,但我认为在 build.properties 中指定类似 sbt.version=1.3.6 的内容会强制 sbt 稍后升级。

我尝试按照 sbt 安装页面上的建议“扩展 zip”,但同样的事情(“找不到命令”),现在不管我将其扩展到哪里或如何更新路径。

编辑 2

我愿意尝试 sdkman,但此时我已经尝试了 installing/uninstalling 一些东西,但我不知道如何从我的 [=90= 中删除 java ]hine,我担心太多的竞争尝试会搞砸这一切。

我用的是java11,jenv,刚刚做了brew install sbt,我这边没问题

$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)
$ brew reinstall sbt
...
==> Reinstalling sbt
==> Pouring sbt--1.6.2.all.bottle.tar.gz
==> Caveats
You can use $SBT_OPTS to pass additional JVM options to sbt.
Project specific options should be placed in .sbtopts in the root of your project.
Global settings should be placed in /opt/homebrew/etc/sbtopts

Homebrew's installation does not include `sbtn`.
==> Summary
  /opt/homebrew/Cellar/sbt/1.6.2: 8 files, 3.7MB
$ sbt about
[info] Updated file /Users/rui/Downloads/sbt-test/project/build.properties: set sbt.version to 1.6.2
[info] welcome to sbt 1.6.2 (AdoptOpenJDK Java 11.0.11)
[info] loading project definition from /Users/rui/Downloads/sbt-test/project
[info] set current project to sbt-test (in build file:/Users/rui/Downloads/sbt-test/)
[info] This is sbt 1.6.2
[info] The current project is ProjectRef(uri("file:/Users/rui/Downloads/sbt-test/"), "sbt-test") 0.1.0-SNAPSHOT
[info] The current project is built against Scala 2.12.15
[info] Available Plugins
[info]  - sbt.ScriptedPlugin
[info]  - sbt.plugins.CorePlugin
[info]  - sbt.plugins.Giter8TemplatePlugin
[info]  - sbt.plugins.IvyPlugin
[info]  - sbt.plugins.JUnitXmlReportPlugin
[info]  - sbt.plugins.JvmPlugin
[info]  - sbt.plugins.MiniDependencyTreePlugin
[info]  - sbt.plugins.SbtPlugin
[info]  - sbt.plugins.SemanticdbPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.12.15

我建议两件事来解决问题:

  • 结帐PATH 事情
  • 运行 brew doctor

据我所知,您可以在 brew 中安装特定的 java 版本。使用 brew cask install java8(当然你需要先安装 cask,brew install cask)。

@Ivan Stanislavciuc 推荐的 SDKMAN 非常棒。它管理 java 环境的方式真的很简单。

这是我从错误的开始中退出并让事情正常进行的过程。

# uninstall everything
brew uninstall sbt
brew uninstall jenv
cd /Library/Java/JavaVirtualMachines
sudo rm -rf <java installation>

# install sdkman
curl -s "https://get.sdkman.io" | bash

# select java version 
# (I chose temurin jdk 8 which is formerly openj9; 
#  can't find hotspot AdoptOpenJdk anymore, is it gone?)
sdk list java
sdk install java 8.0.322-tem
sdk default java 8.0.322-tem

# install sbt
sdk install sbt

很简单。

我曾经使用过热点 adopt open jdk...但是我现在在任何地方都没有看到那个可用的。我看到热点仍然是 SDKMAN 说明中 sbt 安装页面上的推荐(.hs-adpt 是“热点采用开放 jdk”?)。但 temurin 是我认为的 openj9,它与 sbt 页面上的 adoptium.net link 匹配,所以现在我认为没问题。

我在更改 Mac 并重新安装 sbt 后遇到了您提到的相同问题。现在因为我没有得到执行这个(sudo sbt -java-home /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home assembly )到 运行 assembly 命令的确切解决方案。