【发布时间】:2012-05-20 14:14:47
【问题描述】:
构建 ring server-headless 可以工作 -- lein ring server-headless -- 但是当我尝试构建 war 或 uberwar 时出现以下错误,并且无法弄清楚为什么会发生这种情况。
No namespaces to :aot compile listed in project.clj.
Exception in thread "main" java.lang.ExceptionInInitializerError, compiling:(ring/util/servlet.clj:62)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6416)
at clojure.lang.Compiler.analyze(Compiler.java:6216)
...
Caused by: java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at clojure.lang.RT.classForName(RT.java:2013)
at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:938)
at clojure.lang.Compiler$HostExpr.access$400(Compiler.java:710)
at clojure.lang.Compiler.macroexpand1(Compiler.java:6342)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6395)
... 69 more
Caused by: java.lang.Exception: Cyclic load dependency: [ /servlet ]->/ring/util/servlet->[ /servlet ]
at clojure.core$check_cyclic_dependency.invoke(core.clj:5288)
at clojure.core$load.doInvoke(core.clj:5383)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:401)
at servlet.<clinit>(Unknown Source)
... 76 more
我的 project.clj 文件是:
(defproject myproj "0.1"
:description "the sample"
:dependencies [
[org.clojure/clojure "1.3.0"]
[compojure "1.0.4"]
[hiccup "1.0.0"]
[clj-json "0.5.0"]
[ring/ring "1.1.0"]
[clj-http "0.1.1"]
]
:plugins [
[lein-ring "0.7.0"]
]
:ring {:handler routes/start})
如果我删除 :ring {:handler routes/start},那么我会在其他地方得到 NPE。
我不知道我是否在我的 project.clj 中遗漏了某些内容,或者特定版本的 lein 是否在这个用例中被破坏了。有人可以帮我澄清一下吗?
【问题讨论】:
-
有人能告诉我为什么这不是一个真正的问题吗?在这一点上,我无法判断 lein 是否损坏,或者我的项目是否设置不正确。据我所知,我已经正确设置了项目,但我无法让一个常见的用例正常工作。请告诉我为什么这是一个糟糕的问题,或者为什么它不是一个“真正的”问题。
-
我自己解决了这个问题。发布的答案都不正确。
-
基本问题是
routes/start被声明为def而不是defn(未提供问题,因为直到我解决了问题后我才意识到它是相关的)。一个很容易被忽视的非常小的细节,但回想起来我看到的行为是完全合理的。 -
很高兴你知道了。如果重新打开,也许可以发布一个详细的答案?
-
@Kevin:前段时间我自己也遇到过这个问题。你能发布一个详细的答案吗?我会觉得它很有帮助。