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
Clojure 当我构建uberwar时,Lein循环依赖错误的原因是什么?_Clojure_Leiningen_Ring - Fatal编程技术网

Clojure 当我构建uberwar时,Lein循环依赖错误的原因是什么?

Clojure 当我构建uberwar时,Lein循环依赖错误的原因是什么?,clojure,leiningen,ring,Clojure,Leiningen,Ring,构建环形服务器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)

构建环形服务器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
如果我删除
:ring{:handler routes/start}
,那么我会在其他地方得到一个NPE


我不知道我的project.clj中是否遗漏了一些东西,或者对于这个用例,lein的特定版本是否被破坏了。有人能帮我澄清一下吗?

错误说明了一切,项目配置中缺少:aot参数。检查是否使用:aot。

我也有同样的问题,在我的情况下,解决方案就像执行

莱因清洁

莱因环战争


我认为实际的问题是,在某个时候,我的处理程序指向了一个不正确/不存在的处理程序,并且在target/classes目录中留下了一个servlet.clj。进行清理将删除此文件。

我解决了这个问题,这对我来说有点错误。在这里张贴答案,以防有人犯同样的错误

我在src/routes.clj中有如下内容:

(defroutes main-routes
    (GET "/some/path" [& params] (some-code params))
    (route/resources "/")
    (route/not-found "not found"))

(def start (run-jetty (handler/site main-routes) {:port 8080}))
这是设置路由的所有标准代码,并提供一个钩子,通过lein ring服务器headless从命令行启动jetty webapp。除了我声明start是一个全局函数,而不是一个函数。这意味着当我运行lein ring server headless时,一切仍然正常,但当我运行lein ring uberwar时,我最终得到了一个奇怪的配置——一个完整的jetty服务器将尝试使用它的servlet启动,uberwar已经生成了一个servlet,并试图将其打包到一个jar中

当我将代码与compojure示例进行比较时,我一直忽略了这一差异,我想这是因为def和defn在光学上看起来非常相似。但无论如何,我只是为了让它工作而做了这个改变:

(defn start [] (run-jetty (handler/site main-routes) {:port 8080}))  

它是一个网络应用程序,因此没有主应用程序。我还以为Lein会自动生成servlet?在某一点上确实如此……我可以添加
:aot:all
,当我运行
lein-ring-uberwar
(好)时堆栈跟踪消失(好),但它会启动webapp,就好像我运行了
服务器headless
(坏).我肯定试过了,但我会再试一次,看看会发生什么。有人能告诉我为什么这不是一个真正的问题吗?在这一点上,我无法判断lein是否破产,或者我的项目是否设置不当。就我所知,我已经正确地设置了项目,但是我无法让一个通用用例正常工作。请告诉我为什么这是一个糟糕的问题,或者为什么这不是一个“真正的”问题。我已经自己解决了这个问题。发布的答案都不正确。基本问题是
routes/start
被声明为
def
而不是
defn
(问题中没有提供,因为我在解决问题后才意识到它是相关的)。一个很小的细节很容易被忽略,但回想起来,我看到的行为很有道理。很高兴你能理解。如果这个问题再次出现,也许会发布一个详细的答案?@Kevin:我自己也遇到过这个问题。你能给出详细的答案吗?我会觉得这很有帮助。
(defn start [] (run-jetty (handler/site main-routes) {:port 8080}))