boot-clj/boot

PODs vs JNI

Open

#484 opened on Jul 28, 2016

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

Repository metrics

Stars
 (1,748 stars)
PR merge metrics
 (No merged PRs in 30d)

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