graalvm

Ivar Refsdal 2024-03-12T13:21:10.083689Z

I'm trying to use tools.deps inside graalvm. The following error message occurs when running the app:

Error building classpath. Could not find artifact org.eclipse.jetty:jetty-util:jar:${project.version} in central ()
Ex-data: {:lib org.eclipse.jetty/jetty-util, :coord {:mvn/version ${project.version}, :deps/manifest :mvn, :dependents [org.eclipse.jetty/jetty-http], :parents #{[org.clojure/tools.deps org.eclipse.jetty/jetty-http]}}}
Any suggestions? I suspect there is some resolver class missing of some sort, but I am not sure. There are a bunch of resolver classes in reflect-config.json. The error only happens with graalvm, not on the REPL. Project is here: https://github.com/ivarref/finddep Thanks!

Alex Miller (Clojure team) 2024-03-12T13:42:13.754519Z

As you can see, tools.deps is getting some ${project.version} in the version. Is that in your data or is that coming from some unresolved pom variable?

Ivar Refsdal 2024-03-13T09:15:31.798169Z

Thanks Alex. The following works in the REPL:

(apply clojure.tools.deps/calc-basis
       (edn/read-string "({:deps {org.clojure/clojure #:mvn{:version \"1.11.2\"}, com.datomic/peer #:mvn{:version \"1.0.7075\"}}, :mvn/repos {\"central\" {:url \"\"}, \"clojars\" {:url \"\"}}} {:resolve-args {}, :classpath-args {}})\n")
But doing that in graalvm at runtime fails with
clojure.lang.ExceptionInfo: Could not find artifact org.apache.activemq:artemis-commons:jar:${project.version} in central () {:lib org.apache.activemq/artemis-commons, :coord {:mvn/version "${project.version}", :deps/manifest :mvn, :dependents [org.apache.activemq/artemis-core-client], :parents #{[com.datomic/peer org.apache.activemq/artemis-core-client]}}}
I'm still stuck, not sure where to look next

Ivar Refsdal 2024-03-13T12:55:26.932989Z

Smaller reproduction:

(clojure.tools.deps.extensions/coord-deps
    'org.eclipse.jetty/jetty-http
    {:mvn/version "9.4.48.v20220622", :deps/manifest :mvn}
    :mvn (edn/read-string "({:paths [\"src\"], :deps {org.eclipse.jetty/jetty-http #:mvn{:version \"9.4.48.v20220622\"}}, :aliases {:deps {:replace-paths [], :replace-deps #:org.clojure{tools.deps.cli #:mvn{:version \"0.10.55\"}}, :ns-default clojure.tools.deps.cli.api, :ns-aliases {help clojure.tools.deps.cli.help}}, :test {:extra-paths [\"test\"]}}, :mvn/repos {\"central\" {:url \"\"}, \"clojars\" {:url \"\"}}} {:resolve-args {}, :classpath-args {}})\n"))

; returns 
; [[org.eclipse.jetty/jetty-util #:mvn{:version "9.4.48.v20220622"}] [org.eclipse.jetty/jetty-io #:mvn{:version "9.4.48.v20220622"}]] ; in REPL, but
; [[org.eclipse.jetty/jetty-util #:mvn{:version "${project.version}"}] [org.eclipse.jetty/jetty-io #:mvn{:version "${project.version}"}]]
; in graalvm

Ivar Refsdal 2024-03-13T12:56:41.472769Z

so I believe that somewhere in org.eclipse.aether.internal.impl.DefaultRepositorySystem#readArtifactDescriptor something goes wrong in graalvm (perhaps related to reflect-config)