我对Clojure很陌生,玩得很开心。有一件事我遇到了一些麻烦,那就是如何阅读错误,我个人认为它们不是很具有描述性,但这可能是由于我的“新手”。
例如,我现在遇到的问题是当我尝试启动我的环形服务器时(如果需要,我可以提供更多详细信息):
Started server on port 3000
java.lang.IllegalArgumentException: No implementation of method: :make-reader of protocol: #'clojure.java.io/IOFactory found for class: nil
core_deftype.clj:544 clojure.core/-cache-protocol-fn
io.clj:69 clojure.java.io/fn[fn]
io.clj:102 clojure.java.io/reader
RestFn.java:410 clojure.lang.RestFn.invoke
validator.clj:161 selmer.validator/validate-tags
validator.clj:175 selmer.validator/validate
template_parser.clj:155 selmer.template-parser/read-template
template_parser.clj:206 selmer.template-parser/preprocess-template
RestFn.java:410 clojure.lang.RestFn.invoke
parser.clj:211 selmer.parser/parse-file
parser.clj:234 selmer.parser/parse
RestFn.java:442 clojure.lang.RestFn.invoke
parser.clj:99 selmer.parser/render-file
RestFn.java:425 clojure.lang.RestFn.invoke
layout.clj:17 picture-gallery.views.layout/picture-gallery.views.layout.RenderablePage
core.clj:94 compojure.core/make-route[fn]
core.clj:40 compojure.core/if-route[fn]
core.clj:25 compojure.core/if-method[fn]
core.clj:107 compojure.core/routing[fn]
core.clj:2515 clojure.core/some
core.clj:107 compojure.core/routing
RestFn.java:139 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
core.clj:112 compojure.core/routes[fn]
core.clj:107 compojure.core/routing[fn]
core.clj:2515 clojure.core/some
core.clj:107 compojure.core/routing
RestFn.java:139 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
core.clj:112 compojure.core/routes[fn]
middleware.clj:44 noir.util.middleware/wrap-request-map[fn]
keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn]
nested_params.clj:70 ring.middleware.nested-params/wrap-nested-params[fn]
params.clj:58 ring.middleware.params/wrap-params[fn]
middleware.clj:12 hiccup.middleware/wrap-base-url[fn]
multipart_params.clj:107 ring.middleware.multipart-params/wrap-multipart-params[fn]
middleware.clj:139 noir.util.middleware/wrap-access-rules[fn]
validation.clj:135 noir.validation/wrap-noir-validation[fn]
cookies.clj:66 noir.cookies/noir-cookies[fn]
cookies.clj:171 ring.middleware.cookies/wrap-cookies[fn]
session.clj:141 noir.session/noir-flash[fn]
flash.clj:31 ring.middleware.flash/wrap-flash[fn]
session.clj:96 noir.session/noir-session[fn]
session.clj:85 ring.middleware.session/wrap-session[fn]
Var.java:379 clojure.lang.Var.invoke
reload.clj:18 ring.middleware.reload/wrap-reload[fn]
stacktrace.clj:17 ring.middleware.stacktrace/wrap-stacktrace-log[fn]
stacktrace.clj:80 ring.middleware.stacktrace/wrap-stacktrace-web[fn]
jetty.clj:18 ring.adapter.jetty/proxy-handler[fn]
(Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle
HandlerWrapper.java:116 org.eclipse.jetty.server.handler.HandlerWrapper.handle
Server.java:363 org.eclipse.jetty.server.Server.handle
AbstractHttpConnection.java:483 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest
AbstractHttpConnection.java:920 org.eclipse.jetty.server.AbstractHttpConnection.headerComplete
AbstractHttpConnection.java:982 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete
HttpParser.java:635 org.eclipse.jetty.http.HttpParser.parseNext
HttpParser.java:235 org.eclipse.jetty.http.HttpParser.parseAvailable
AsyncHttpConnection.java:82 org.eclipse.jetty.server.AsyncHttpConnection.handle
SelectChannelEndPoint.java:628 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle
SelectChannelEndPoint.java:52 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run
QueuedThreadPool.java:608 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob
QueuedThreadPool.java:543 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run
Thread.java:722 java.lang.Thread.run
这对我来说太模糊了,我怎么知道我做错了什么?我不记得和任何“制造阅读器”、协议或IOFactory打过交道。
这是一个很难回答的问题,没有太多的背景。然而,你似乎与之有冲突http://dev.clojure.org/jira/browse/CLJ-1210这表明这个错误消息显然没有帮助!
请你可以看看Clojure Clostache错误-没有实现的方法d::使-阅读器的协议:#'clojure.java.io/IOFactory发现类:零,这很可能是一个重复。总的来说,你所指的一些资源并不存在。因此,它被检索为“零”,这将导致您看到的麻烦。可能是一个库可能会抛出资源未找到异常的情况(或者至少有一个抛出异常的变体)。
我在这方面深入研究的方法之一是查看selmer源代码,因为这是第一个非clojure版本。堆栈跟踪的核心部分。它做的第一件事是。。。
(defn validate-tags [template]
(with-open [rdr (reader template)]
从这里,一些推论和快速的谷歌搜索让我达到了上述目的。
[2017年更新:Clojure 1.8最终修复了这个毫无帮助的错误,希望人们不再看到这个问题!]
我正在使用clojure-1.5。1,compojure-1.1。5,克罗斯塔什-1.3。1. 模板文件位于资源/公共/模板文件夹下。 代码: 对Clostache渲染资源的调用引发以下异常:
获取java。lang.IllegalArgumentException:没有实现方法::作为协议的文件:#'clojure。JAVA为类clojure找到io/强制。当我在MAC OS X上从终端运行lein test或lein repl时,lang.PersistentVector。尽管lein repl在eclipse中运行良好(使用逆时针插件) 我的项目文件是:
我正在尝试从ClojureScript编写一个宏来处理试剂应用程序的文件I/O。我得到这个错误: 当我试图做到以下几点: 但我可以做得很好: 这是宏: 我做错了什么?
我正在尝试使用leiningen创建一个多目标项目,因此我让它生成多个不同的jar文件,这是我创建的项目文件: 它不断返回错误,我不知道它到底出了什么问题
当我制作一个复合特征(名称?)这是由另外两个特性组成的,编译器似乎没有检测到这两个特性是由该复合特性实现的。 代码如下: 错误是这样的: 为什么它没有检测到特性没有同时实现和? (我省略了另一个同样以同样方式抱怨< code>Seek的错误消息。)
我有一个Clojure库,它定义了协议,并对其进行了扩展 ...但是当我试图使用它时: 我不想知道这个例外的意义,或者我应该做什么不同的事情。