在 Datomic 查询中使用 System/getProperties 会抛出 FileNotFoundException

Using System/getProperties in a Datomic query throws a FileNotFoundException

我正在按照 docs 上的示例进行操作,但卡在了 调用 Java 方法 。当我运行

[:find ?k ?v
 :where [(System/getProperties) [[?k ?v]]]]

我收到 FileNotFoundException 无法在 class 路径上找到 System__init.class 或 System.clj。 clojure.lang.RT.load (RT.java:463).

当我在 REPL 中 运行 (System/getProperties) 时,我得到了结果。

{"java.runtime.name" "OpenJDK Runtime Environment",
 "sun.boot.library.path" "/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64",
 "java.vm.version" "25.181-b13",
 ...}

我尝试 运行 使用完全限定的 class 名称 (java.lang.System/getProperties) 连接代码段,但我仍然遇到错误。

(d/q '[:find ?k ?v
       :where
       [(java.lang.System/getProperties) [[?k ?v]]]
       [(.endsWith ^String ?k "version")]])

Clojure 版本: 1.9.0

Datomic 版本: [com.datomic/datomic-pro "0.9.5703"](本地)

有什么想法可以使它正常工作吗?我正在使用 IntelliJ 开发和 运行ning REPL。

Stuart Halloway 指出,他认为这是类路径功能支持引入的错误。 Datomic 将该符号错误地视为 Clojure 名称。

解决方法是给它一个 Clojure 符号来使用。例如:

(defn get-props [] (System/getProperties))

(d/q '[:find ?k ?v
       :where [(user/get-props) [[?k ?v]]]])