replikativ / datahike

A fast, immutable, distributed & compositional Datalog engine for everyone.
https://datahike.io
Eclipse Public License 1.0
1.62k stars 95 forks source link

[Bug]: Problem with bump org.babashka/tools-deps-native from 0.1.1 to 0.1.2 and `datahike-logo.txt` not being packaged into the jar #663

Closed macielti closed 6 months ago

macielti commented 6 months ago

What version of Datahike are you using?

0.6.1557

What version of Java are you using?

openjdk 21.0.1 2023-10-17

What operating system are you using?

MacOS

What database EDN configuration are you using?

{:port 4444 :level :debug :dev-mode true :token "securerandompassword"}

Describe the bug

The org.babashka/tools-deps-native "0.1.2" used on bb.end is causing problems while running bb http-server-uber to generate the jar file for datahike.http.server as it is described in the documentation.

Exception while calling bb http-server-uber:

Cleaning up target directory 'target-http-server'...Done.
----- Error --------------------------------------------------------------------
Type:     clojure.lang.ExceptionInfo
Message:  No matching method equals found taking 1 args for class java.io.File
Data:     {:type "class java.lang.IllegalArgumentException"}
Location: /Users/bruno.nascimento/.gitlibs/libs/io.github.babashka/tools.bbuild/73e4d0a26c65cdf1d4c7bf7e9e46e6e5f1978a37/src/main/clojure/clojure/tools/build/util/pod.clj:1:29
----- Context ------------------------------------------------------------------
1: (ns clojure.tools.build.util.pod
                               ^--- No matching method equals found taking 1 args for class java.io.File
2:   (:require [clojure.string :as str]))
3:
4: (def windows? (str/starts-with?
5:                (System/getProperty "os.name")
6:                "Windows"))
----- Stack trace --------------------------------------------------------------
babashka.pods.impl/processor              - <built-in>
babashka.pods.sci/load-pod/fn--26975      - <built-in>
clojure.tools.deps/create-basis           - /Users/bruno.nascimento/.gitlibs/libs/io.github.babashka/tools.bbuild/73e4d0a26c65cdf1d4c7bf7e9e46e6e5f1978a37/src/main/clojure/clojure/tools/build/util/pod.clj:1:29
clojure.tools.deps/create-basis           - /Users/bruno.nascimento/.gitlibs/libs/io.github.babashka/tools.bbuild/73e4d0a26c65cdf1d4c7bf7e9e46e6e5f1978a37/src/main/clojure/clojure/tools/build/util/pod.clj:1:1
clojure.tools.build.tasks.create-basis    - /Users/bruno.nascimento/.gitlibs/libs/io.github.babashka/tools.bbuild/73e4d0a26c65cdf1d4c7bf7e9e46e6e5f1978a37/src/main/clojure/clojure/tools/build/tasks/create_basis.clj:30:6
... (run with --debug to see elided elements)
tools.build                               - /Users/bruno.nascimento/Documents/personal-projects/datahike/bb/src/tools/build.clj:24:21
clojure.tools.build.api/javac             - /Users/bruno.nascimento/.gitlibs/libs/io.github.babashka/tools.bbuild/73e4d0a26c65cdf1d4c7bf7e9e46e6e5f1978a37/src/main/clojure/clojure/tools/build/api.clj:320:1
tools.build/compile-java                  - /Users/bruno.nascimento/Documents/personal-projects/datahike/bb/src/tools/build.clj:22:4
tools.build/compile-java                  - /Users/bruno.nascimento/Documents/personal-projects/datahike/bb/src/tools/build.clj:18:1
user-ce2c7348-f79c-4c30-8d89-11031dde2018 - <expr>:31:1
Compiling Java classes saving them to 'target-http-server/classes'...%

After downgrading org.babashka/tools-deps-native "0.1.2" to org.babashka/tools-deps-native "0.1.1" I was able to generate the jar file. But when I try to run the file I got another exception related with the resources/datahike-logo.txt not being loaded in to the jar file.

Exception while executing the compiled jar (java -jar target-http-server/datahike-http-server-0.6.1566.jar resources/example_server.edn):

Warning: environ value /Users/bruno.nascimento/.jenv/versions/1.8 for key :java-home has been overwritten with /Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home/jre
Exception in thread "main" java.lang.ExceptionInInitializerError
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2209)
        at clojure.lang.RT.classForName(RT.java:2218)
        at clojure.lang.RT.loadClassForName(RT.java:2237)
        at clojure.lang.RT.load(RT.java:449)
        at clojure.lang.RT.load(RT.java:424)
        at clojure.core$load$fn__6908.invoke(core.clj:6161)
        at clojure.core$load.invokeStatic(core.clj:6160)
        at clojure.core$load.doInvoke(core.clj:6144)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5933)
        at clojure.core$load_one.invoke(core.clj:5928)
        at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
        at clojure.core$load_lib.invokeStatic(core.clj:5974)
        at clojure.core$load_lib.doInvoke(core.clj:5953)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$load_libs.invokeStatic(core.clj:6016)
        at clojure.core$load_libs.doInvoke(core.clj:6000)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$require.invokeStatic(core.clj:6038)
        at clojure.core$require.doInvoke(core.clj:6038)
        at clojure.lang.RestFn.invoke(RestFn.java:457)
        at datahike.datom$loading__6789__auto____23349.invoke(datom.cljc:1)
        at datahike.datom__init.load(Unknown Source)
        at datahike.datom__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2209)
        at clojure.lang.RT.classForName(RT.java:2218)
        at clojure.lang.RT.loadClassForName(RT.java:2237)
        at clojure.lang.RT.load(RT.java:449)
        at clojure.lang.RT.load(RT.java:424)
        at clojure.core$load$fn__6908.invoke(core.clj:6161)
        at clojure.core$load.invokeStatic(core.clj:6160)
        at clojure.core$load.doInvoke(core.clj:6144)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5933)
        at clojure.core$load_one.invoke(core.clj:5928)
        at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
        at clojure.core$load_lib.invokeStatic(core.clj:5974)
        at clojure.core$load_lib.doInvoke(core.clj:5953)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$load_libs.invokeStatic(core.clj:6016)
        at clojure.core$load_libs.doInvoke(core.clj:6000)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$require.invokeStatic(core.clj:6038)
        at clojure.core$require.doInvoke(core.clj:6038)
        at clojure.lang.RestFn.invoke(RestFn.java:1096)
        at datahike.index.persistent_set$loading__6789__auto____23237.invoke(persistent_set.cljc:1)
        at datahike.index.persistent_set__init.load(Unknown Source)
        at datahike.index.persistent_set__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2209)
        at clojure.lang.RT.classForName(RT.java:2218)
        at clojure.lang.RT.loadClassForName(RT.java:2237)
        at clojure.lang.RT.load(RT.java:449)
        at clojure.lang.RT.load(RT.java:424)
        at clojure.core$load$fn__6908.invoke(core.clj:6161)
        at clojure.core$load.invokeStatic(core.clj:6160)
        at clojure.core$load.doInvoke(core.clj:6144)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5933)
        at clojure.core$load_one.invoke(core.clj:5928)
        at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
        at clojure.core$load_lib.invokeStatic(core.clj:5974)
        at clojure.core$load_lib.doInvoke(core.clj:5953)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$load_libs.invokeStatic(core.clj:6016)
        at clojure.core$load_libs.doInvoke(core.clj:6000)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$require.invokeStatic(core.clj:6038)
        at clojure.core$require.doInvoke(core.clj:6038)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at datahike.index$loading__6789__auto____22987.invoke(index.cljc:1)
        at datahike.index__init.load(Unknown Source)
        at datahike.index__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2209)
        at clojure.lang.RT.classForName(RT.java:2218)
        at clojure.lang.RT.loadClassForName(RT.java:2237)
        at clojure.lang.RT.load(RT.java:449)
        at clojure.lang.RT.load(RT.java:424)
        at clojure.core$load$fn__6908.invoke(core.clj:6161)
        at clojure.core$load.invokeStatic(core.clj:6160)
        at clojure.core$load.doInvoke(core.clj:6144)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5933)
        at clojure.core$load_one.invoke(core.clj:5928)
        at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
        at clojure.core$load_lib.invokeStatic(core.clj:5974)
        at clojure.core$load_lib.doInvoke(core.clj:5953)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$load_libs.invokeStatic(core.clj:6016)
        at clojure.core$load_libs.doInvoke(core.clj:6000)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$require.invokeStatic(core.clj:6038)
        at clojure.core$require.doInvoke(core.clj:6038)
        at clojure.lang.RestFn.invoke(RestFn.java:805)
        at datahike.store$loading__6789__auto____16076.invoke(store.cljc:1)
        at datahike.store__init.load(Unknown Source)
        at datahike.store__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2209)
        at clojure.lang.RT.classForName(RT.java:2218)
        at clojure.lang.RT.loadClassForName(RT.java:2237)
        at clojure.lang.RT.load(RT.java:449)
        at clojure.lang.RT.load(RT.java:424)
        at clojure.core$load$fn__6908.invoke(core.clj:6161)
        at clojure.core$load.invokeStatic(core.clj:6160)
        at clojure.core$load.doInvoke(core.clj:6144)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5933)
        at clojure.core$load_one.invoke(core.clj:5928)
        at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
        at clojure.core$load_lib.invokeStatic(core.clj:5974)
        at clojure.core$load_lib.doInvoke(core.clj:5953)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$load_libs.invokeStatic(core.clj:6016)
        at clojure.core$load_libs.doInvoke(core.clj:6000)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$require.invokeStatic(core.clj:6038)
        at clojure.core$require.doInvoke(core.clj:6038)
        at clojure.lang.RestFn.invoke(RestFn.java:703)
        at datahike.json$loading__6789__auto____29903.invoke(json.cljc:1)
        at datahike.json__init.load(Unknown Source)
        at datahike.json__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2209)
        at clojure.lang.RT.classForName(RT.java:2218)
        at clojure.lang.RT.loadClassForName(RT.java:2237)
        at clojure.lang.RT.load(RT.java:449)
        at clojure.lang.RT.load(RT.java:424)
        at clojure.core$load$fn__6908.invoke(core.clj:6161)
        at clojure.core$load.invokeStatic(core.clj:6160)
        at clojure.core$load.doInvoke(core.clj:6144)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5933)
        at clojure.core$load_one.invoke(core.clj:5928)
        at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
        at clojure.core$load_lib.invokeStatic(core.clj:5974)
        at clojure.core$load_lib.doInvoke(core.clj:5953)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$load_libs.invokeStatic(core.clj:6016)
        at clojure.core$load_libs.doInvoke(core.clj:6000)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$require.invokeStatic(core.clj:6038)
        at clojure.core$require.doInvoke(core.clj:6038)
        at clojure.lang.RestFn.invoke(RestFn.java:551)
        at datahike.http.middleware$loading__6789__auto____37795.invoke(middleware.clj:1)
        at datahike.http.middleware__init.load(Unknown Source)
        at datahike.http.middleware__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2209)
        at clojure.lang.RT.classForName(RT.java:2218)
        at clojure.lang.RT.loadClassForName(RT.java:2237)
        at clojure.lang.RT.load(RT.java:449)
        at clojure.lang.RT.load(RT.java:424)
        at clojure.core$load$fn__6908.invoke(core.clj:6161)
        at clojure.core$load.invokeStatic(core.clj:6160)
        at clojure.core$load.doInvoke(core.clj:6144)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invokeStatic(core.clj:5933)
        at clojure.core$load_one.invoke(core.clj:5928)
        at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
        at clojure.core$load_lib.invokeStatic(core.clj:5974)
        at clojure.core$load_lib.doInvoke(core.clj:5953)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$load_libs.invokeStatic(core.clj:6016)
        at clojure.core$load_libs.doInvoke(core.clj:6000)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$require.invokeStatic(core.clj:6038)
        at clojure.core$require.doInvoke(core.clj:6038)
        at clojure.lang.RestFn.invoke(RestFn.java:3894)
        at datahike.http.server$loading__6789__auto____37793.invoke(server.clj:1)
        at datahike.http.server__init.load(Unknown Source)
        at datahike.http.server__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2209)
        at clojure.lang.RT.classForName(RT.java:2218)
        at clojure.lang.RT.loadClassForName(RT.java:2237)
        at clojure.lang.RT.load(RT.java:449)
        at clojure.lang.RT.load(RT.java:424)
        at clojure.core$load$fn__6908.invoke(core.clj:6161)
        at clojure.core$load.invokeStatic(core.clj:6160)
        at clojure.core$load.doInvoke(core.clj:6144)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.lang.Var.invoke(Var.java:384)
        at clojure.lang.Util.loadWithClass(Util.java:251)
        at datahike.http.server.<clinit>(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Cannot open <nil> as a Reader.
        at clojure.java.io$fn__11641.invokeStatic(io.clj:288)
        at clojure.java.io$fn__11641.invoke(io.clj:288)
        at clojure.java.io$fn__11530$G__11519__11537.invoke(io.clj:69)
        at clojure.java.io$reader.invokeStatic(io.clj:102)
        at clojure.java.io$reader.doInvoke(io.clj:86)
        at clojure.lang.RestFn.invoke(RestFn.java:410)
        at clojure.lang.AFn.applyToHelper(AFn.java:154)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.core$apply.invokeStatic(core.clj:669)
        at clojure.core$slurp.invokeStatic(core.clj:7009)
        at clojure.core$slurp.doInvoke(core.clj:7009)
        at clojure.lang.RestFn.invoke(RestFn.java:410)
        at datahike.tools__init.load(Unknown Source)
        at datahike.tools__init.<clinit>(Unknown Source)
        ... 210 more

In order to fix the second problem I had to add the resources directory to :src-dirs here.

What is the expected behaviour?

While executing bb http-server-uber I was expecting it to generate a jar file in order to use the server feature. And after generating the jar file I was expecting to test it executing with the config exemple file without gettin any exception.

How can the behaviour be reproduced?

Clone the project repository on local machine and run bb http-server-uber (This will reproduce the first problem).

For the second one you should bump org.babashka/tools-deps-native from 0.1.2 to 0.1.1, build the jar file with bb http-server-uber and try to run it against the configuration example file java -jar target-http-server/datahike-http-server-0.6.1566.jar resources/example_server.edn