Skip to content

Instantly share code, notes, and snippets.

@mk
Last active March 6, 2018 09:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mk/50b70c76ba0b94b765982ce5a6ff1fd1 to your computer and use it in GitHub Desktop.
Save mk/50b70c76ba0b94b765982ce5a6ff1fd1 to your computer and use it in GitHub Desktop.
tools.deps problem with jnr-unixsocket
#!/bin/bash
set -eu pipefail
echo "Classpath tree built with lein:"
lein deps :tree
echo "\nClasspath tree built with tools.deps (notice com.github.jnr/jffi :classifier \"native\" missing):"
clj -Stree
echo "\nrunning socket_sample.clj with lein"
cat socket_sample.clj | lein repl
echo "\nrunning socket_sample.clj with tools.deps"
clj socket_sample.clj
{:deps {org.clojure/clojure {:mvn/version "1.9.0"}
com.github.jnr/jnr-unixsocket {:mvn/version "0.18"}}}
Classpath tree built with lein:
[alembic "0.3.2"]
[lein-as-resource "2.5.0" :exclusions [[org.clojure/clojure]]]
[org.flatland/classlojure "0.7.0" :exclusions [[org.clojure/clojure]]]
[org.tcrawley/dynapath "0.2.3" :exclusions [[org.clojure/clojure]]]
[clojure-complete "0.2.4" :exclusions [[org.clojure/clojure]]]
[com.github.jnr/jnr-unixsocket "0.18"]
[com.github.jnr/jnr-constants "0.9.8"]
[com.github.jnr/jnr-enxio "0.16"]
[com.github.jnr/jnr-ffi "2.1.4"]
[com.github.jnr/jffi "1.2.15"]
[com.github.jnr/jffi "1.2.15" :classifier "native" :scope "runtime"]
[com.github.jnr/jnr-x86asm "1.0.2"]
[org.ow2.asm/asm-analysis "5.0.3"]
[org.ow2.asm/asm-commons "5.0.3"]
[org.ow2.asm/asm-tree "5.0.3"]
[org.ow2.asm/asm-util "5.0.3"]
[org.ow2.asm/asm "5.0.3"]
[com.github.jnr/jnr-posix "3.0.35"]
[org.clojure/clojure "1.9.0"]
[org.clojure/core.specs.alpha "0.1.24"]
[org.clojure/spec.alpha "0.1.143"]
[org.clojure/tools.nrepl "0.2.12" :exclusions [[org.clojure/clojure]]]
Classpath tree built with tools.deps (notice com.github.jnr/jffi :classifier "native" missing):
org.clojure/clojure 1.9.0
org.clojure/core.specs.alpha 0.1.24
org.clojure/spec.alpha 0.1.143
com.github.jnr/jnr-unixsocket 0.18
com.github.jnr/jnr-ffi 2.1.4
org.ow2.asm/asm-util 5.0.3
org.ow2.asm/asm 5.0.3
org.ow2.asm/asm-commons 5.0.3
com.github.jnr/jnr-x86asm 1.0.2
com.github.jnr/jffi 1.2.15
org.ow2.asm/asm-analysis 5.0.3
org.ow2.asm/asm-tree 5.0.3
com.github.jnr/jnr-constants 0.9.8
com.github.jnr/jnr-posix 3.0.35
com.github.jnr/jnr-enxio 0.16
running socket_sample.clj with lein
nREPL server started on port 62211 on host 127.0.0.1 - nrepl://127.0.0.1:62211
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.9.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_151-b12
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Exit: Control+D or (exit) or (quit)
Results: Stored in vars *1, *2, *3, an exception in *e
user=> (require 'clojure.java.io)
nil
user=> (import 'jnr.unixsocket.UnixSocketAddress)
jnr.unixsocket.UnixSocketAddress
user=>
user=> (UnixSocketAddress. (clojure.java.io/file "/tmp/fubar.sock"))
#object[jnr.unixsocket.UnixSocketAddress 0x62e9e504 "[family=PF_UNIX path=/tmp/fubar.sock]"]
user=> Bye for now!
running socket_sample.clj with tools.deps
Exception in thread "main" java.lang.UnsatisfiedLinkError: could not load FFI provider jnr.ffi.provider.jffi.Provider, compiling:(/Users/mk/code/50b70c76ba0b94b765982ce5a6ff1fd1/socket_sample.clj:4:1)
at clojure.lang.Compiler.load(Compiler.java:7526)
at clojure.lang.Compiler.loadFile(Compiler.java:7452)
at clojure.main$load_script.invokeStatic(main.clj:278)
at clojure.main$script_opt.invokeStatic(main.clj:338)
at clojure.main$script_opt.invoke(main.clj:333)
at clojure.main$main.invokeStatic(main.clj:424)
at clojure.main$main.doInvoke(main.clj:387)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.main.main(main.java:37)
Caused by: java.lang.UnsatisfiedLinkError: could not load FFI provider jnr.ffi.provider.jffi.Provider
at jnr.ffi.provider.InvalidRuntime.newLoadError(InvalidRuntime.java:101)
at jnr.ffi.provider.InvalidRuntime.findType(InvalidRuntime.java:42)
at jnr.ffi.Struct$NumberField.<init>(Struct.java:872)
at jnr.ffi.Struct$Unsigned8.<init>(Struct.java:1113)
at jnr.unixsocket.SockAddrUnix$BSDSockAddrUnix.<init>(SockAddrUnix.java:187)
at jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174)
at jnr.unixsocket.UnixSocketAddress.<init>(UnixSocketAddress.java:47)
at user$eval149.invokeStatic(socket_sample.clj:4)
at user$eval149.invoke(socket_sample.clj:4)
at clojure.lang.Compiler.eval(Compiler.java:7062)
at clojure.lang.Compiler.load(Compiler.java:7514)
... 9 more
Caused by: java.lang.ExceptionInInitializerError
at jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:58)
at jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
at jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
at jnr.ffi.Runtime$SingletonHolder.<clinit>(Runtime.java:82)
at jnr.ffi.Runtime.getSystemRuntime(Runtime.java:67)
at jnr.unixsocket.SockAddrUnix.<init>(SockAddrUnix.java:46)
at jnr.unixsocket.SockAddrUnix$BSDSockAddrUnix.<init>(SockAddrUnix.java:185)
... 15 more
Caused by: java.lang.IllegalStateException: Can't overwrite cause with java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: could not locate stub library in jar file. Tried [jni/Darwin/libjffi-1.2.dylib, /jni/Darwin/libjffi-1.2.dylib]
at com.kenai.jffi.internal.StubLoader.getStubLibraryStream(StubLoader.java:407)
at com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:355)
at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:258)
at com.kenai.jffi.internal.StubLoader.<clinit>(StubLoader.java:444)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.kenai.jffi.Init.load(Init.java:68)
at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45)
at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
at com.kenai.jffi.Type.resolveSize(Type.java:155)
at com.kenai.jffi.Type.size(Type.java:138)
at jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:187)
at jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:66)
at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
at jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:62)
at jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:58)
at jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
at jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
at jnr.ffi.Runtime$SingletonHolder.<clinit>(Runtime.java:82)
at jnr.ffi.Runtime.getSystemRuntime(Runtime.java:67)
at jnr.unixsocket.SockAddrUnix.<init>(SockAddrUnix.java:46)
at jnr.unixsocket.SockAddrUnix$BSDSockAddrUnix.<init>(SockAddrUnix.java:185)
at jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174)
at jnr.unixsocket.UnixSocketAddress.<init>(UnixSocketAddress.java:47)
at user$eval149.invokeStatic(socket_sample.clj:4)
at user$eval149.invoke(socket_sample.clj:4)
at clojure.lang.Compiler.eval(Compiler.java:7062)
at clojure.lang.Compiler.load(Compiler.java:7514)
at clojure.lang.Compiler.loadFile(Compiler.java:7452)
at clojure.main$load_script.invokeStatic(main.clj:278)
at clojure.main$script_opt.invokeStatic(main.clj:338)
at clojure.main$script_opt.invoke(main.clj:333)
at clojure.main$main.invokeStatic(main.clj:424)
at clojure.main$main.doInvoke(main.clj:387)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.main.main(main.java:37)
at java.lang.Throwable.initCause(Throwable.java:457)
at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:252)
at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
at com.kenai.jffi.Type.resolveSize(Type.java:155)
at com.kenai.jffi.Type.size(Type.java:138)
at jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:187)
at jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:66)
at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
at jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:62)
... 29 more
Caused by: java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: could not locate stub library in jar file. Tried [jni/Darwin/libjffi-1.2.dylib, /jni/Darwin/libjffi-1.2.dylib]
at com.kenai.jffi.internal.StubLoader.getStubLibraryStream(StubLoader.java:407)
at com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:355)
at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:258)
at com.kenai.jffi.internal.StubLoader.<clinit>(StubLoader.java:444)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.kenai.jffi.Init.load(Init.java:68)
at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45)
at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
at com.kenai.jffi.Type.resolveSize(Type.java:155)
at com.kenai.jffi.Type.size(Type.java:138)
at jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:187)
at jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:66)
at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
at jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:62)
at jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:58)
at jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
at jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
at jnr.ffi.Runtime$SingletonHolder.<clinit>(Runtime.java:82)
at jnr.ffi.Runtime.getSystemRuntime(Runtime.java:67)
at jnr.unixsocket.SockAddrUnix.<init>(SockAddrUnix.java:46)
at jnr.unixsocket.SockAddrUnix$BSDSockAddrUnix.<init>(SockAddrUnix.java:185)
at jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174)
at jnr.unixsocket.UnixSocketAddress.<init>(UnixSocketAddress.java:47)
at user$eval149.invokeStatic(socket_sample.clj:4)
at user$eval149.invoke(socket_sample.clj:4)
at clojure.lang.Compiler.eval(Compiler.java:7062)
at clojure.lang.Compiler.load(Compiler.java:7514)
at clojure.lang.Compiler.loadFile(Compiler.java:7452)
at clojure.main$load_script.invokeStatic(main.clj:278)
at clojure.main$script_opt.invokeStatic(main.clj:338)
at clojure.main$script_opt.invoke(main.clj:333)
at clojure.main$main.invokeStatic(main.clj:424)
at clojure.main$main.doInvoke(main.clj:387)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.main.main(main.java:37)
at com.kenai.jffi.Foreign.newLoadError(Foreign.java:72)
at com.kenai.jffi.Foreign.access$300(Foreign.java:42)
at com.kenai.jffi.Foreign$InValidInstanceHolder.getForeign(Foreign.java:98)
at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
... 37 more
Caused by: java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: could not locate stub library in jar file. Tried [jni/Darwin/libjffi-1.2.dylib, /jni/Darwin/libjffi-1.2.dylib]
at com.kenai.jffi.internal.StubLoader.getStubLibraryStream(StubLoader.java:407)
at com.kenai.jffi.internal.StubLoader.loadFromJar(StubLoader.java:355)
at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:258)
at com.kenai.jffi.internal.StubLoader.<clinit>(StubLoader.java:444)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.kenai.jffi.Init.load(Init.java:68)
at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45)
at com.kenai.jffi.Foreign.getInstance(Foreign.java:103)
at com.kenai.jffi.Type$Builtin.lookupTypeInfo(Type.java:242)
at com.kenai.jffi.Type$Builtin.getTypeInfo(Type.java:237)
at com.kenai.jffi.Type.resolveSize(Type.java:155)
at com.kenai.jffi.Type.size(Type.java:138)
at jnr.ffi.provider.jffi.NativeRuntime$TypeDelegate.size(NativeRuntime.java:187)
at jnr.ffi.provider.AbstractRuntime.<init>(AbstractRuntime.java:48)
at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:66)
at jnr.ffi.provider.jffi.NativeRuntime.<init>(NativeRuntime.java:41)
at jnr.ffi.provider.jffi.NativeRuntime$SingletonHolder.<clinit>(NativeRuntime.java:62)
at jnr.ffi.provider.jffi.NativeRuntime.getInstance(NativeRuntime.java:58)
at jnr.ffi.provider.jffi.Provider.<init>(Provider.java:29)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.getInstance(FFIProvider.java:68)
at jnr.ffi.provider.FFIProvider$SystemProviderSingletonHolder.<clinit>(FFIProvider.java:57)
at jnr.ffi.provider.FFIProvider.getSystemProvider(FFIProvider.java:35)
at jnr.ffi.Runtime$SingletonHolder.<clinit>(Runtime.java:82)
at jnr.ffi.Runtime.getSystemRuntime(Runtime.java:67)
at jnr.unixsocket.SockAddrUnix.<init>(SockAddrUnix.java:46)
at jnr.unixsocket.SockAddrUnix$BSDSockAddrUnix.<init>(SockAddrUnix.java:185)
at jnr.unixsocket.SockAddrUnix.create(SockAddrUnix.java:174)
at jnr.unixsocket.UnixSocketAddress.<init>(UnixSocketAddress.java:47)
at user$eval149.invokeStatic(socket_sample.clj:4)
at user$eval149.invoke(socket_sample.clj:4)
at clojure.lang.Compiler.eval(Compiler.java:7062)
at clojure.lang.Compiler.load(Compiler.java:7514)
at clojure.lang.Compiler.loadFile(Compiler.java:7452)
at clojure.main$load_script.invokeStatic(main.clj:278)
at clojure.main$script_opt.invokeStatic(main.clj:338)
at clojure.main$script_opt.invoke(main.clj:333)
at clojure.main$main.invokeStatic(main.clj:424)
at clojure.main$main.doInvoke(main.clj:387)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.main.main(main.java:37)
at com.kenai.jffi.internal.StubLoader.load(StubLoader.java:270)
at com.kenai.jffi.internal.StubLoader.<clinit>(StubLoader.java:444)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.kenai.jffi.Init.load(Init.java:68)
at com.kenai.jffi.Foreign$InstanceHolder.getInstanceHolder(Foreign.java:49)
at com.kenai.jffi.Foreign$InstanceHolder.<clinit>(Foreign.java:45)
... 39 more
(defproject jffi-sample "1.0"
:dependencies [[org.clojure/clojure "1.9.0"] ; included in order to run lein repl
[com.github.jnr/jnr-unixsocket "0.18"]])
(require 'clojure.java.io)
(import 'jnr.unixsocket.UnixSocketAddress)
(UnixSocketAddress. (clojure.java.io/file "/tmp/fubar.sock"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment