boot icon indicating copy to clipboard operation
boot copied to clipboard

NullPointerException when trying to run shebang boot script on macOS

Open caleb opened this issue 5 years ago • 5 comments
trafficstars

On two different machines running macOS Catalina 10.15.1 I get a NullPointerException when trying to run boot "shebang" scripts.

I've tried Oracle JDK 11, 12, and 13, and OpenJDK 13.

Inside a docker container the scripts run as expected. These scripts also used to run on macOS a couple months ago. I will try a fresh Catalina install in a VM to make sure it is not a result of having upgraded from Mojave (10.14) on both of my Macs. I will post an update once I'm able to do that.

Here is a script that throws an NPE:

#!/usr/bin/env boot

(print "Hello world")

Here is the error I get:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Boot failed to start:
java.lang.NullPointerException
	at boot.main$shebang_QMARK_.invokeStatic(main.clj:114)
	at boot.main$shebang_QMARK_.invoke(main.clj:110)
	at boot.main$_main.invokeStatic(main.clj:140)
	at boot.main$_main.invoke(main.clj:123)
	at clojure.lang.Var.invoke(Var.java:399)
	at org.projectodd.shimdandy.impl.ClojureRuntimeShimImpl.invoke(ClojureRuntimeShimImpl.java:154)
	at org.projectodd.shimdandy.impl.ClojureRuntimeShimImpl.invoke(ClojureRuntimeShimImpl.java:145)
	at boot.App.runBoot(App.java:407)
	at boot.App.main(App.java:500)

To Reproduce Steps to reproduce the behavior:

  1. Open a terminal
  2. Run the above script ./hello.clj
  3. See error

Expected behavior It should print "Hello world"

Versions:

  • OS: macOS 10.15.1 (Catalina)
  • java -version java version "12.0.1" 2019-04-16 Java(TM) SE Runtime Environment (build 12.0.1+12) Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)
  • boot --version #http://boot-clj.com #Sun Dec 01 23:17:27 EST 2019 BOOT_VERSION=2.8.3 BOOT_CLOJURE_VERSION=1.10.1 BOOT_CLOJURE_NAME=org.clojure/clojure

caleb avatar Dec 02 '19 04:12 caleb

Okay, I've tested this on a fresh install of Catalina and I get the same error.

I installed boot-clj and oracle-jdk from home-brew and home-brew cask respectively.

caleb avatar Dec 02 '19 15:12 caleb

I believe this is caused by a missing property "boot.app.path" as per the stack trace.

burn2delete avatar Dec 02 '19 18:12 burn2delete

I can also confirm the above script works on 10.14.6

burn2delete avatar Dec 02 '19 18:12 burn2delete

That’s what I figured too, and I’ve done some more experiments by installing Mojave, and High Sierra and I am getting the same issue.

I don’t know what changed. I’ve been using these scripts for years on different machines without ever seeing this.

Maybe the boot wrapper program has changed? Or the brew version of boot has a bug? I can try to install boot by hand and see what’s up.

From a clean VM I’m doing:

$ xcode-select —install
$ <install home brew>
$ brew cask install oracle-jdk 
$ brew install boot-clj
$ ./hello.clj

It seems like the boot wrapper is supposed to set boot.app.path but it isn’t getting set like you said.

I’ll do some more tests later.

On Dec 2, 2019, at 1:21 PM, Matthew Ratzke [email protected] wrote:

 I believe this is caused by a missing property "boot.app.path" as per the stack trace.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

caleb avatar Dec 02 '19 18:12 caleb

Okay, I've tracked this down to being an issue with the homebrew installation of boot. When installed manually boot works.

Now to track down what changed in the homebrew formula

EDIT:

Here's the commit that broke it:

https://github.com/Homebrew/homebrew-core/pull/46494/files

Looks like they switched from the shellscript provided by boot-clj (from the boot-bin repo) to using a homebrew generated wrapper script that calls the boot-clj jar file directly, but doesn't provide the necessary definitions.

I will submit a patch to homebrew to revert to the old installation method.

caleb avatar Dec 02 '19 19:12 caleb