在Datomic查询中使用System / getProperties会引发FileNotFoundException

时间:2018-09-18 03:45:21

标签: datomic

我正在遵循docs上的示例,并停留在调用Java方法上。当我跑步时

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

我得到一个 FileNotFoundException无法在类路径上找到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",
 ...}

我尝试使用完全合格的类名(java.lang.System/getProperties)运行代码段,但仍然出现错误。

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

Clojure版本: 1.9.0

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

有什么想法我需要做些什么才能使它起作用?我正在使用IntelliJ开发和运行REPL。

1 个答案:

答案 0 :(得分:0)

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

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

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

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