gmethvin / directory-watcher

A cross-platform Java recursive directory watcher, with a JNA macOS watcher and Scala better-files integration
Apache License 2.0
264 stars 34 forks source link

LibCarbon failure on MacOS Big Sur #52

Closed zhye9452 closed 4 years ago

zhye9452 commented 4 years ago

Play Version

2.8.2

API

Scala

Operating System

MacOS Big Sur Developer Beta Seed 1

JDK

JDK 11

Library Dependencies

Expected Behavior

  1. sbt run

Actual Behavior

  1. sbt run fails to run with below exception
    [error] java.lang.UnsatisfiedLinkError: Unable to load library 'Carbon':
    [error] dlopen(libCarbon.dylib, 9): image not found
    [error] dlopen(libCarbon.dylib, 9): image not found
    [error]     at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:302)
    [error]     at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:455)
    [error]     at com.sun.jna.Library$Handler.<init>(Library.java:192)
    [error]     at com.sun.jna.Native.loadLibrary(Native.java:646)
    [error]     at com.sun.jna.Native.loadLibrary(Native.java:630)
    [error]     at io.methvin.watchservice.jna.CarbonAPI.<clinit>(CarbonAPI.java:20)
    [error]     at io.methvin.watchservice.jna.CFStringRef.toCFString(CFStringRef.java:23)
    [error]     at io.methvin.watchservice.MacOSXListeningWatchService.register(MacOSXListeningWatchService.java:128)
    [error]     at io.methvin.watchservice.WatchablePath.register(WatchablePath.java:50)
    [error]     at io.methvin.watcher.DirectoryWatcher.register(DirectoryWatcher.java:341)
    [error]     at io.methvin.watcher.DirectoryWatcher.registerAll(DirectoryWatcher.java:315)
    [error]     at io.methvin.watcher.DirectoryWatcher.<init>(DirectoryWatcher.java:176)
    [error]     at io.methvin.watcher.DirectoryWatcher$Builder.build(DirectoryWatcher.java:117)
    [error]     at play.dev.filewatch.DefaultFileWatchService.watch(DefaultFileWatchService.scala:38)
    [error]     at play.dev.filewatch.FileWatchService$$anon$1.watch(FileWatchService.scala:87)
    [error]     at play.runsupport.Reloader.<init>(Reloader.scala:443)
    [error]     at play.runsupport.Reloader$.reloader$lzycompute$1(Reloader.scala:283)
    [error]     at play.runsupport.Reloader$.play$runsupport$Reloader$$reloader$1(Reloader.scala:275)
    [error]     at play.runsupport.Reloader$.startDevMode(Reloader.scala:311)
    [error]     at play.sbt.run.PlayRun$.devModeServer$lzycompute$1(PlayRun.scala:98)
    [error]     at play.sbt.run.PlayRun$.devModeServer$1(PlayRun.scala:81)
    [error]     at play.sbt.run.PlayRun$.$anonfun$playRunTask$3(PlayRun.scala:105)
    [error]     at play.sbt.run.PlayRun$.$anonfun$playRunTask$3$adapted(PlayRun.scala:67)
    [error]     at scala.Function1.$anonfun$compose$1(Function1.scala:49)

    Reproducible Test Case

msm commented 4 years ago

The underlying issue is with macOS 11's changes to how JNA can load dylibs:

https://github.com/java-native-access/jna/pull/1216

gmethvin commented 4 years ago

@msm So should this be fixed by upgrading JNA?

msm commented 4 years ago

@gmethvin yes, once a new JNA release is made available (5.6?)

gmethvin commented 4 years ago

ok, thanks!

dbwiddis commented 4 years ago

FYI, JNA 5.6.0 has been released.

gmethvin commented 4 years ago

I released directory-watcher 0.10.0 with the fix.

mkurz commented 4 years ago

@gmethvin I think you can close this issue now.

dirspb commented 3 years ago

Still getting this error in directory-watcher 0.10.1 on Apple Silicon + Big Sur + sbt 1.4.9: [error] java.lang.NoClassDefFoundError: Could not initialize class io.methvin.watchservice.jna.CarbonAPI [error] at io.methvin.watchservice.jna.CFStringRef.toCFString(CFStringRef.java:23) [error] at io.methvin.watchservice.MacOSXListeningWatchService.register(MacOSXListeningWatchService.java:127) [error] at io.methvin.watchservice.WatchablePath.register(WatchablePath.java:50) [error] at io.methvin.watcher.DirectoryWatcher.register(DirectoryWatcher.java:341) [error] at io.methvin.watcher.DirectoryWatcher.registerAll(DirectoryWatcher.java:315) [error] at io.methvin.watcher.DirectoryWatcher.<init>(DirectoryWatcher.java:176) [error] at io.methvin.watcher.DirectoryWatcher$Builder.build(DirectoryWatcher.java:117) [error] at play.dev.filewatch.DefaultFileWatchService.watch(DefaultFileWatchService.scala:41) [error] at play.dev.filewatch.FileWatchService$$anon$1.watch(FileWatchService.scala:90) [error] at play.runsupport.Reloader.<init>(Reloader.scala:443) [error] at play.runsupport.Reloader$.reloader$lzycompute$1(Reloader.scala:283) [error] at play.runsupport.Reloader$.play$runsupport$Reloader$$reloader$1(Reloader.scala:275) [error] at play.runsupport.Reloader$.startDevMode(Reloader.scala:306) [error] at play.sbt.run.PlayRun$.devModeServer$lzycompute$1(PlayRun.scala:98) [error] at play.sbt.run.PlayRun$.devModeServer$1(PlayRun.scala:81) [error] at play.sbt.run.PlayRun$.$anonfun$playRunTask$3(PlayRun.scala:105) [error] at play.sbt.run.PlayRun$.$anonfun$playRunTask$3$adapted(PlayRun.scala:67) [error] at scala.Function1.$anonfun$compose$1(Function1.scala:49)

mkurz commented 2 years ago

@dirspb you still get that error with directory watcher v0.15.0 and 1.6.2?

ashwinbhaskar commented 2 years ago

I am getting this error with sbt 1.5.6 and the dependency

"io.methvin" % "directory-watcher" % "0.15.0"

I have apple M1 chip and MacOS 12

mkurz commented 2 years ago

You need to upgrade to sbt 1.6.2

ashwinbhaskar commented 2 years ago

@mkurz thank you for the quick reply. Yes, it started working after upgrading to 1.6.2.