【发布时间】:2014-05-17 20:40:49
【问题描述】:
我一直在尝试遵循一些关于在 Clojure 中构建 Web 应用程序的教程,但我一直遇到同样的问题。以最简单的情况为例,我尝试按照本教程进行操作:http://drtom.ch/posts/2012-12-10/An_Introduction_to_Webprogramming_in_Clojure_-_Ring_and_Middleware/
当我进入启动服务器的步骤(run-jetty handler {:port 8383})时,我收到以下错误:
NoSuchMethodError org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava/lang/String;[Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple; org.eclipse.jetty.util.log.JettyAwareLogger.log (JettyAwareLogger.java:613)
我让lien 向我展示了类路径,果然,org.slf4j.helpers.MessageFormatter 不在那里。
我在我尝试过的几乎所有基于环的网络教程中都遇到过这个问题,所以要么我配置了一些奇怪的东西(我更新并重新安装了 lein,吹掉了我的 ~/.m2 并重建了,等等),或者在组合在一起构成类路径的无数依赖项中发生了一些变化。
有什么想法吗?
编辑
我得到了更多信息——我在 virtualbox 中创建了一个 VM,安装了 OpenJDK 和 lein,并在那里创建了一个项目。它工作得很好。由于我在与主机共享的目录中创建它,然后我尝试在主机的同一目录中执行“lein ring server”,但失败并出现上述错误。
所以我在 vm 和主机中都做了“lein classpath”并比较了结果——它们是相同的。我还检查了他们运行的是相同 JVM 的相同版本(OpenJDK 64 位版本 24.51-b03)。
那么,如果他们使用相同的类路径运行相同的 JVM,还剩下什么?
【问题讨论】:
-
那个教程很老了。您是否尝试过使用较新版本的 Clojure(例如 1.5.1 或更高版本)和当前版本的 Ring(例如 1.2.2)?
-
我已经尝试了六种不同的关于 ring、luminus、compojure、noir 的教程......我一直遇到同样的问题。
-
能否包含您的 project.clj 文件以显示您正在使用的依赖项?
-
这正是我链接到的教程中的那个......(defproject quickstart "1.0.0-SNAPSHOT" :description "FIXME: write description" :dependencies [[org.clojure/clojure "1.3 .0"] [环 "1.1.5"]])