boot-clj/boot

PODs vs JNI

Open

#484 opened on Jul 28, 2016

View on GitHub
 (7 comments) (0 reactions) (0 assignees)Clojure (1,748 stars) (178 forks)batch import
help wanted

Description

I'm trying to use boot-test. I'm using clojure 1.8.0, boot 2.6.0 on a jdk 8 on Linux. My project uses a JNI based library and I'm not able to use boot-test together with the watch task. If I run "boot test" everything is fine:

(local) ~/steinmetz (git)-[master] % boot test
...
Testing steinmetz.zvk

Testing steinmetz.zvk-test

Ran 20 tests containing 50 assertions.
0 failures, 0 errors.

However, I'm not able to use boot watch test:

30 (local) ~/steinmetz (git)-[master] % boot watch test

Starting file watcher (CTRL-C to quit)...
...
Testing steinmetz.zvk

Testing steinmetz.zvk-test

Ran 20 tests containing 50 assertions.
0 failures, 0 errors.
Elapsed time: 12.677 sec

(which looks good until I change a file)

clojure.lang.Compiler$CompilerException: java.lang.UnsatisfiedLinkError: Native Library /home/ralf/.libsepa/linux-64/libsepa271/libsepa-jni.so already loaded in another classloader, compiling:(clj_libsepa/core.clj:9:3)
     java.lang.UnsatisfiedLinkError: Native Library /home/ralf/.libsepa/linux-64/libsepa271/libsepa-jni.so already loaded in another classloader
                           ...
                 com.libsepa.SEPA.<clinit>
                           ...
                  clojure.core/load/fn          core.clj: 5893
            clojure.core/load/invokeStatic          core.clj: 5892
                     clojure.core/load          core.clj: 5876
                           ...
            clojure.core/load-one/invokeStatic          core.clj: 5697
                 clojure.core/load-one          core.clj: 5692
                  clojure.core/load-lib/fn          core.clj: 5737
            clojure.core/load-lib/invokeStatic          core.clj: 5736
                 clojure.core/load-lib          core.clj: 5717
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
           clojure.core/load-libs/invokeStatic          core.clj: 5774
                clojure.core/load-libs          core.clj: 5758
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
             clojure.core/require/invokeStatic          core.clj: 5796
                  clojure.core/require          core.clj: 5796
                           ...
       steinmetz.libsepa/eval27644/loading--auto--       libsepa.clj:    1
          steinmetz.libsepa/eval27644/invokeStatic       libsepa.clj:    1
               steinmetz.libsepa/eval27644       libsepa.clj:    1
                           ...
                  clojure.core/load/fn          core.clj: 5893
            clojure.core/load/invokeStatic          core.clj: 5892
                     clojure.core/load          core.clj: 5876
                           ...
            clojure.core/load-one/invokeStatic          core.clj: 5697
                 clojure.core/load-one          core.clj: 5692
                  clojure.core/load-lib/fn          core.clj: 5737
            clojure.core/load-lib/invokeStatic          core.clj: 5736
                 clojure.core/load-lib          core.clj: 5717
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
           clojure.core/load-libs/invokeStatic          core.clj: 5774
                clojure.core/load-libs          core.clj: 5758
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
             clojure.core/require/invokeStatic          core.clj: 5796
                  clojure.core/require          core.clj: 5796
                           ...
steinmetz.qlauf.ueberweisung/eval26343/loading--auto--  ueberweisung.clj:    1
   steinmetz.qlauf.ueberweisung/eval26343/invokeStatic  ueberweisung.clj:    1
        steinmetz.qlauf.ueberweisung/eval26343  ueberweisung.clj:    1
                           ...
                  clojure.core/load/fn          core.clj: 5893
            clojure.core/load/invokeStatic          core.clj: 5892
                     clojure.core/load          core.clj: 5876
                           ...
            clojure.core/load-one/invokeStatic          core.clj: 5697
                 clojure.core/load-one          core.clj: 5692
                  clojure.core/load-lib/fn          core.clj: 5737
            clojure.core/load-lib/invokeStatic          core.clj: 5736
                 clojure.core/load-lib          core.clj: 5717
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
           clojure.core/load-libs/invokeStatic          core.clj: 5774
                clojure.core/load-libs          core.clj: 5758
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
             clojure.core/require/invokeStatic          core.clj: 5796
                  clojure.core/require          core.clj: 5796
                           ...
      steinmetz.render.qlauf/eval26335/loading--auto--         qlauf.clj:    1
     steinmetz.render.qlauf/eval26335/invokeStatic         qlauf.clj:    1
              steinmetz.render.qlauf/eval26335         qlauf.clj:    1
                           ...
                  clojure.core/load/fn          core.clj: 5893
            clojure.core/load/invokeStatic          core.clj: 5892
                     clojure.core/load          core.clj: 5876
                           ...
            clojure.core/load-one/invokeStatic          core.clj: 5697
                 clojure.core/load-one          core.clj: 5692
                  clojure.core/load-lib/fn          core.clj: 5737
            clojure.core/load-lib/invokeStatic          core.clj: 5736
                 clojure.core/load-lib          core.clj: 5717
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
           clojure.core/load-libs/invokeStatic          core.clj: 5774
                clojure.core/load-libs          core.clj: 5758
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
             clojure.core/require/invokeStatic          core.clj: 5796
                  clojure.core/require          core.clj: 5796
                           ...
     steinmetz.http.core/eval19626/loading--auto--          core.clj:    1
        steinmetz.http.core/eval19626/invokeStatic          core.clj:    1
             steinmetz.http.core/eval19626          core.clj:    1
                           ...
                  clojure.core/load/fn          core.clj: 5893
            clojure.core/load/invokeStatic          core.clj: 5892
                     clojure.core/load          core.clj: 5876
                           ...
            clojure.core/load-one/invokeStatic          core.clj: 5697
                 clojure.core/load-one          core.clj: 5692
                  clojure.core/load-lib/fn          core.clj: 5737
            clojure.core/load-lib/invokeStatic          core.clj: 5736
                 clojure.core/load-lib          core.clj: 5717
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
           clojure.core/load-libs/invokeStatic          core.clj: 5774
                clojure.core/load-libs          core.clj: 5758
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
             clojure.core/require/invokeStatic          core.clj: 5796
                  clojure.core/require          core.clj: 5796
                           ...
          steinmetz.http/eval19475/loading--auto--          http.clj:    1
         steinmetz.http/eval19475/invokeStatic          http.clj:    1
                  steinmetz.http/eval19475          http.clj:    1
                           ...
                  clojure.core/load/fn          core.clj: 5893
            clojure.core/load/invokeStatic          core.clj: 5892
                     clojure.core/load          core.clj: 5876
                           ...
            clojure.core/load-one/invokeStatic          core.clj: 5697
                 clojure.core/load-one          core.clj: 5692
                  clojure.core/load-lib/fn          core.clj: 5737
            clojure.core/load-lib/invokeStatic          core.clj: 5736
                 clojure.core/load-lib          core.clj: 5717
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
           clojure.core/load-libs/invokeStatic          core.clj: 5774
                clojure.core/load-libs          core.clj: 5758
                           ...
               clojure.core/apply/invokeStatic          core.clj:  648
             clojure.core/require/invokeStatic          core.clj: 5796
                  clojure.core/require          core.clj: 5796
                           ...
                  pod$eval504.invokeStatic    NO_SOURCE_FILE
                    pod$eval504.invoke    NO_SOURCE_FILE
                           ...
            clojure.core/eval/invokeStatic          core.clj: 3105
                     clojure.core/eval          core.clj: 3101
                     boot.pod/eval-in*           pod.clj:  437
                           ...
                     boot.pod/eval-in*           pod.clj:  440
             adzerk.boot-test/eval161/fn/fn/fn     boot_test.clj:  102
          boot.task.built-in/fn/fn/fn/fn/fn/fn      built_in.clj:  348
             boot.task.built-in/fn/fn/fn/fn/fn      built_in.clj:  348
            boot.task.built-in/fn/fn/fn/fn      built_in.clj:  345
                   boot.core/run-tasks          core.clj:  938
                     boot.core/boot/fn          core.clj:  948
           clojure.core/binding-conveyor-fn/fn          core.clj: 1938
                           ...
Elapsed time: 9.029 sec

I've ran into the same issue while trying to use clojurescript with my project. So, running "boot test" manually is not a workaround for me here.

Contributor guide