Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用实例时ClassNotFoundException?关于Clojure中的defrecord类型_Clojure_Plumatic Schema - Fatal编程技术网

使用实例时ClassNotFoundException?关于Clojure中的defrecord类型

使用实例时ClassNotFoundException?关于Clojure中的defrecord类型,clojure,plumatic-schema,Clojure,Plumatic Schema,我编写了一个函数,它只选择以特定方式命名的贴图的键: 这在我的单元测试中非常有效: (testing "Required key and wildcard" (let [schema {:foo s/Str, s/Keyword s/Any}] (is (= {:foo "Yup", :bar 42, :baz true} (select-schema {:foo "Yup", :bar 42, :baz true} schema))) (is (= {:foo

我编写了一个函数,它只选择以特定方式命名的贴图的键:

这在我的单元测试中非常有效:

(testing "Required key and wildcard"
    (let [schema {:foo s/Str, s/Keyword s/Any}]
      (is (= {:foo "Yup", :bar 42, :baz true} (select-schema {:foo "Yup", :bar 42, :baz true} schema)))
      (is (= {:foo "Yup", :bar 42} (select-schema {:foo "Yup", :bar 42} schema)))
      (is (= {:foo "Yup"} (select-schema {:foo "Yup"} schema)))))
但是,当我在一个完全独立的项目中使用foo.schema/select-schema(即在我的foo项目中安装lein)来构建一个jar并将其粘贴到我的~/.m2/存储库中并将其命名为依赖项时,我会得到一个ClassNotFoundException:

我查看了Prismatic模式源代码,发现OptionalKey是defrecord类型。通过谷歌搜索发现defrecord生成了一个Java类,有时需要在需要定义它的名称空间后导入该类,但在包含foo.schema的项目中尝试这样做并没有任何区别:它在单元测试中工作,但在另一个使用foo作为依赖项的项目中不起作用。

您将schema.core作为s导入。如果这正是您正在运行的代码,那么您可能应该使用实例?s/OptionalKey%是否为可选项?功能


更不用说schema是select schema中的一个局部变量参数。

instance?适用于Java类型,因此它不知道Clojure名称空间和require的别名…:作为s。我不理解您关于schema是selectschema中的局部变量AKA绑定的第二个声明。那会引起问题吗?别担心,我是个白痴。在这种情况下,您的问题可能是运行单独的项目时,jar定义的schema.core.OptionalKey不在您的类路径上。您知道为什么会这样吗?在包含上述函数的foo项目和依赖于foo的单独项目中,我将prismatic/schema定义为一个依赖项。
(testing "Required key and wildcard"
    (let [schema {:foo s/Str, s/Keyword s/Any}]
      (is (= {:foo "Yup", :bar 42, :baz true} (select-schema {:foo "Yup", :bar 42, :baz true} schema)))
      (is (= {:foo "Yup", :bar 42} (select-schema {:foo "Yup", :bar 42} schema)))
      (is (= {:foo "Yup"} (select-schema {:foo "Yup"} schema)))))
Exception in thread "main" java.lang.ExceptionInInitializerError, compiling:(insurrection/test/handler.clj:1:1)
    at clojure.lang.Compiler.load(Compiler.java:7142)
    ...
Caused by: java.lang.ExceptionInInitializerError
    at foo.schema__init.load(Unknown Source)
    at foo.schema__init.<clinit>(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    ...
Caused by: java.lang.ClassNotFoundException: schema.core.OptionalKey
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    ...