sbt / io

IO module for sbt
Apache License 2.0
40 stars 45 forks source link

Update JNA library for compatibility with Apple M1 + io.methvin:directory-watcher #320

Closed vbabenkoru closed 3 years ago

vbabenkoru commented 3 years ago

The JNA library version (5.5.0) crashes on Apple M1, updating it to 5.7.0 or higher should resolve this. I'm getting this error when running our Scala/Play app via sbt run:

[error] java.lang.UnsatisfiedLinkError: /Users/victor.babenko/Library/Caches/JNA/temp/jna2263257085680314373.tmp: dlopen(/Users/victor.babenko/Library/Caches/JNA/temp/jna2263257085680314373.tmp, 1): no suitable image found.  Did find:
[error]     /Users/victor.babenko/Library/Caches/JNA/temp/jna2263257085680314373.tmp: no matching architecture in universal wrapper
[error]     /Users/victor.babenko/Library/Caches/JNA/temp/jna2263257085680314373.tmp: no matching architecture in universal wrapper
[error]     at java.lang.ClassLoader$NativeLibrary.load(Native Method)
[error]     at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1950)
[error]     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1832)
[error]     at java.lang.Runtime.load0(Runtime.java:811)
[error]     at java.lang.System.load(System.java:1088)
[error]     at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1018)
[error]     at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:988)
[error]     at com.sun.jna.Native.<clinit>(Native.java:195)
[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)

Updating JNA in our project's build.sbt doesn't help: it only updates JNA in the app's classpath, not in the sbt launcher classpath. Looks like the only way to resolve this is to bump the JNA dependency in sbt.io (that is itself a dependency of the sbt launcher).

vbabenkoru commented 3 years ago

I also tried adding libraryDependencies += "net.java.dev.jna" % "jna" % "5.7.0" to plugins.sbt, but that didn't work either.

vbabenkoru commented 3 years ago

And replacing .sbt/boot/scala-2.12.14/org.scala-sbt/sbt/1.5.5/jna-5.5.0.jar with a jna-5.8.0.jar fixes the issue, so bumping the dependency in sbt.io is definitely required.