sbt - Scala - Brew - MacOS - Unable to connect to sbt shell at all: NoClassDefFoundError

Viewed 561

So I'm just trying to get a project set up using JDK 15 / SBT 1.5.4 / Scala 2.13.6 all of which have been installed via brew on MacOS.

However before I even attempt to build via intellij etc. I'm unable to connect to the sbt shell via a normal terminal.

[info] welcome to sbt 1.5.4 (AdoptOpenJDK Java 15.0.2)
[info] loading global plugins from /Users/user/.sbt/1.0/plugins
[warn] Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? (default: r)
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: Could not initialize class com.swoval.runtime.ShutdownHooks
        at com.swoval.runtime.ShutdownHooks$1.run(ShutdownHooks.java:25)

I've tried reinstalling all three dependancies a few times and cleared the cache but still nothing. I'm guessing something isn't configured right because it's unable to even connect to the shell.

Thanks!

EDIT: I've just followed the install steps on the sbt docs and the only requirements are JDK 11 or 8 and sbt itself. I've removed scala / JDK15 and re-downloaded JDK 11 via SDK-man this time and i'm still having the same issue.

EDIT 2: I've removed the .sbt directory and reinitiased and now sbt command is showing more output, hopefully this helps a little more.

java.lang.NoClassDefFoundError: Could not initialize class com.swoval.runtime.ShutdownHooks
    at com.swoval.runtime.NativeLoader.loadPackaged(NativeLoader.java:143)
    at com.swoval.runtime.NativeLoader.loadPackaged(NativeLoader.java:174)
    at com.swoval.files.apple.FileEventMonitorImpl.<clinit>(FileEventMonitors.java:127)
    at com.swoval.files.apple.FileEventMonitors.get(FileEventMonitors.java:47)
    at com.swoval.files.ApplePathWatcher.<init>(ApplePathWatcher.java:258)
    at com.swoval.files.ApplePathWatcher.<init>(ApplePathWatcher.java:194)
    at com.swoval.files.ApplePathWatchers.get(ApplePathWatcher.java:331)
    at com.swoval.files.PathWatchers.get(PathWatchers.java:84)
    at com.swoval.files.FileTreeRepositories.get(FileTreeRepositories.java:64)
    at com.swoval.files.FileTreeRepositories.get(FileTreeRepositories.java:32)
    at sbt.internal.nio.FileTreeRepositoryImpl.<init>(FileTreeRepositoryImpl.scala:46)
    at sbt.internal.nio.FileTreeRepository$.default(FileTreeRepository.scala:40)
    at sbt.BuiltinCommands$.$anonfun$setupGlobalFileTreeRepository$1(Main.scala:985)
    at sbt.BuiltinCommands$.$anonfun$doLoadProject$5(Main.scala:974)
    at sbt.Project$.setProject(Project.scala:501)
    at sbt.BuiltinCommands$.doLoadProject(Main.scala:974)
    at sbt.BuiltinCommands$.$anonfun$loadProjectImpl$2(Main.scala:912)
    at sbt.Command$.$anonfun$applyEffect$4(Command.scala:150)
    at sbt.Command$.$anonfun$applyEffect$2(Command.scala:145)
    at sbt.Command$.process(Command.scala:189)
    at sbt.MainLoop$.$anonfun$processCommand$5(MainLoop.scala:245)
    at scala.Option.getOrElse(Option.scala:189)
    at sbt.MainLoop$.process$1(MainLoop.scala:245)
    at sbt.MainLoop$.processCommand(MainLoop.scala:278)
    at sbt.MainLoop$.$anonfun$next$5(MainLoop.scala:163)
    at sbt.State$StateOpsImpl$.runCmd$1(State.scala:289)
    at sbt.State$StateOpsImpl$.process$extension(State.scala:325)
    at sbt.MainLoop$.$anonfun$next$4(MainLoop.scala:163)
    at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
    at sbt.MainLoop$.next(MainLoop.scala:163)
    at sbt.MainLoop$.run(MainLoop.scala:144)
    at sbt.MainLoop$.$anonfun$runWithNewLog$1(MainLoop.scala:119)
    at sbt.io.Using.apply(Using.scala:27)
    at sbt.MainLoop$.runWithNewLog(MainLoop.scala:112)
    at sbt.MainLoop$.runAndClearLast(MainLoop.scala:66)
    at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:51)
    at sbt.MainLoop$.runLogged(MainLoop.scala:42)
    at sbt.StandardMain$.runManaged(Main.scala:218)
    at sbt.xMain$.$anonfun$run$11(Main.scala:133)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
    at scala.Console$.withIn(Console.scala:230)
    at sbt.internal.util.Terminal$.withIn(Terminal.scala:560)
    at sbt.internal.util.Terminal$.$anonfun$withStreams$1(Terminal.scala:350)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
    at scala.Console$.withOut(Console.scala:167)
    at sbt.internal.util.Terminal$.$anonfun$withOut$2(Terminal.scala:550)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
    at scala.Console$.withErr(Console.scala:196)
    at sbt.internal.util.Terminal$.withOut(Terminal.scala:550)
    at sbt.internal.util.Terminal$.withStreams(Terminal.scala:350)
    at sbt.xMain$.withStreams$1(Main.scala:87)
    at sbt.xMain$.run(Main.scala:121)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at sbt.internal.XMainConfiguration.run(XMainConfiguration.java:56)
    at sbt.xMain.run(Main.scala:46)
    at xsbt.boot.Launch$.$anonfun$run$1(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$1(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] java.lang.NoClassDefFoundError: Could not initialize class com.swoval.runtime.ShutdownHooks
[error] Use 'last' for the full log.
[warn] Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? (default: r)
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: Could not initialize class com.swoval.runtime.ShutdownHooks
        at com.swoval.runtime.ShutdownHooks$1.run(ShutdownHooks.java:25)

EDIT3: Tried creating a new user and just downloading sbt and still getting the same issue. Will attempt completely removing Java as it seems to be the culprit and reinstalling.

2 Answers

Similar to Boris's suggestion the issue lied in the installation version of Java.

There are two versions for AdoptOpenJDK, .j9 an .hs as seen below if you are using sdk-man as a package manager:

AdoptOpenJDK | >>> | 16.0.1.j9    | adpt    | installed  | 16.0.1.j9-adpt
             |     | 16.0.1.hs    | adpt    |            | 16.0.1.hs-adpt
             |     | 11.0.11.j9   | adpt    |            | 11.0.11.j9-adpt
             |     | 11.0.11.hs   | adpt    |            | 11.0.11.hs-adpt

For some reason the OpenJDK version .hs-adpt shows this issue for every version but the .j9-adpt version works fine.

TLDR: Install the .j9-adpt version of Java that you need otherwise .hs-adpt is not working for me with sbt version 1.5.4.

I assume the reason - you are using wrong Java JDK for Mac OS with M1 chip. You need to install proper Java JDK version, I use sdkman for that.

  1. Install sdk man:
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
  1. set up sdk man to not use rosetta2_compatbile versions:
vim .sdkman/etc/config

and set sdkman_rosetta2_compatbile=false

  1. choose java JDK from the list:
sdk list java

================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Azul Zulu     |     | 16.0.1       | zulu    |            | 16.0.1-zulu
               |     | 11.0.11      | zulu    |            | 11.0.11-zulu
               |     | 8.0.292      | zulu    |            | 8.0.292-zulu
 BellSoft      |     | 16.0.1       | librca  |            | 16.0.1-librca
               |     | 11.0.11      | librca  |            | 11.0.11-librca
               |     | 8.0.292      | librca  |            | 8.0.292-librca
 Java.net      |     | 18.ea.3      | open    |            | 18.ea.3-open
               |     | 18.ea.2      | open    |            | 18.ea.2-open
               |     | 18.ea.1      | open    |            | 18.ea.1-open
               |     | 17.ea.28     | open    |            | 17.ea.28-open
               |     | 17.ea.27     | open    |            | 17.ea.27-open
               |     | 17.ea.26     | open    |            | 17.ea.26-open
               |     | 17.ea.25     | open    |            | 17.ea.25-open
================================================================================

and install it using command sdk install java IDENTIFIER, i.e.:

sdk install java 16.0.1-zulu
Related