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]: prep-lib is broken #624

Closed TimoKramer closed 1 year ago

TimoKramer commented 1 year ago

What version of Datahike are you using?

main

What version of Java are you using?

19

What operating system are you using?

Linux

What database EDN configuration are you using?

-

Describe the bug

When using datahike as a lib I need to run clj -X:deps prep to compile the java classes. This throws Prep function could not be resolved: tools.build/jcompile because the clj -T:build jcompile functionality seems to be broken. Tried from datahike-server repository.

In the datahike-folder when cloned to disk clj -X:deps prep does nothing but clj -T:build compile throws java.lang.Exception: Cyclic load dependency: [ /clojure/main ]->/clojure/spec/alpha->[ /clojure/main ]->/clojure/core/server

What is the expected behaviour?

clj -X:deps prep should compile the java code like it is described here.

How can the behaviour be reproduced?

clj -X:deps prep

Moocar commented 1 year ago

I've also run into this. I tried debugging it, but can't deduce any useful info from the emitted stacktrace for java.lang.Exception: Cyclic load dependency: [ /clojure/main ]->/clojure/spec/alpha->[ /clojure/main ]->/clojure/core/server .

I tried running the build command from the circle ci yaml (clj -A:build -P). It completed successfully, but the prep command still failed with the above error.

oelrich commented 1 year ago

The reason for this seems to be that the [:deps/prep-lib :fn] path points to a babashka build task and not a function. A really ugly hack that seems to provide a workaround for the problem is as follows.

First add a build.clj:

(ns build
  (:require [clojure.java.shell :refer [sh]]))

(defn bb-trigger [_input]
  (sh "bb" "jcompile"))

Then change the ´deps.edn´ to use that file as build namespace and the function, i.e. :build {:ns-default build} and :fn bb-trigger.

The result is really slow for some reason, and someone with more clojure experience may find a neater solution.

TimoKramer commented 1 year ago

A really ugly hack

Haha :) I like it. I will try to test it and solve this issue soonish. Thanks!

TimoKramer commented 1 year ago

I think I will do it like you proposed. Do you want to submit that patch? @oelrich

oelrich commented 1 year ago

Absolutely! I'll try to get it done today.