hiccup 1.0.0-beta1 错误

9
我正在使用 hiccup-1.0.0-beta1 创建一个 compojure 项目。当我运行 lein ring server-headless 命令时,会得到以下堆栈跟踪信息:
Caused by: java.lang.IllegalAccessError: defelem does not exist
at clojure.core$refer.doInvoke(core.clj:3287)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_lib.doInvoke(core.clj:4781)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_libs.doInvoke(core.clj:4800)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:544)
at clojure.core$use.doInvoke(core.clj:4892)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at hiccup.page_helpers$eval17$loading__4414__auto____18.invoke(page_helpers.clj:1)
at hiccup.page_helpers$eval17.invoke(page_helpers.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)

这让我感到困惑,因为在hiccup中,文件page_helpers.clj已经不存在了:

$ jar tf lib/hiccup-1.0.0-beta1.jar 
META-INF/MANIFEST.MF
META-INF/maven/hiccup/hiccup/pom.xml
META-INF/maven/hiccup/hiccup/pom.properties
project.clj
hiccup/compiler.clj
hiccup/core.clj
hiccup/def.clj
hiccup/element.clj
hiccup/form.clj
hiccup/middleware.clj
hiccup/page.clj
hiccup/util.clj
$ 

此外,我的代码甚至没有尝试引入page_helpers.clj文件:
(ns views.layout 
    (:require [app-config :as config])
    (:use hiccup.core)
    (:use hiccup.page)
    (:use hiccup.element))

回滚到0.3.8版本后(修复了:use语句),代码可以正常工作... - Kevin
1个回答

4

我遇到了同样的问题。

我认为你正在使用依赖项 lein-ring。如果你查看项目/lib/dev文件夹,你会看到那里有 hiccup 0.3.X jar 。这是因为文件 ring-devel jar 使用旧的hiccup。我猜问题的原因与这些文件之间的冲突有关。但我还没有找到解决方法。

然而,如果你使用 lein ring uberwar创建可部署的文件,则该文件可以在另一个容器(例如tomcat)中正常工作。


1
在Maven中,我可以进行依赖排除...虽然我还不是Lein专家,但我想知道是否有一种方法可以从Lein-Ring中排除Hiccup?但很好,你发现了这个问题,一直困扰着我... - Kevin
这是如何排除依赖项的方法: :dev-dependencies [[lein-ring "0.5.4" :exclusions [hiccup]]]但我仍然遇到错误。 - Sathish
1
根据此Github问题 https://github.com/weavejester/hiccup/issues/41#issuecomment-4423262,这只会在Ring 1.1中得到修复。 - Sathish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接