我正在使用Intellij + Cursive,并且想调试使用ring + compojure编写的Clojure Web应用程序。我使用lein和ring插件在Intellij终端中启动应用程序:
> lein ring server-headless
我想使用Intellij调试此应用程序,以在源代码中设置断点,查看变量等。
但是Intellij的Leiningen选项卡未使用ring命令显示任务。运行配置也没有运行ring命令的选项。
答案 0 :(得分:2)
您需要执行两个步骤:
project.clj
以传递额外的参数,例如 :ring {:nrepl {:start? true :port 4001} ;; <== Add this
:handler com.mycompany.web/myhandler} ;; you should have this
...这应该在端口4000中启动Web应用程序,并在端口4001中启动nREPL端口进行调试等。您可以检查lein-ring documentation以获得更多详细信息。
启动应用程序时,您应该看到以下内容:
$ lein ring server-headless 4000
[... some output omitted ...]
Started nREPL server on port 4001
Started server on port 4000
localhost
或0.0.0.0
。答案 1 :(得分:1)
Intellij有一个remote debug Run Configuration的can be used with Clojure。
首先在project.clj
文件的jvm中添加以下选项:
:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5010"]
其中5010是要在Intellij远程调试配置中指定的端口号。
然后,在Intellij中,转到Run -> Run... -> Edit Configurations...
,使用+按钮并选择Remote.
。为配置命名,将端口更改为5010,然后单击“确定”。使用lein运行应用程序:
> lein ring server-headless
应用程序运行后,运行(在Intellij中)您创建的Intellij远程调试配置。您将能够设置断点,逐行运行等。
没有莱宁根
另一个选择是放下leiningen并将ring应用程序作为Cursive中的Clojure应用程序运行。您必须添加一个-main
函数:
(defn -main [] (run-jetty app {:port 8080})
app
是您在:ring {:handler xxx/app}
中定义路由并用作环形处理程序project.clj.
的函数,您需要[ring.adapter.jetty :refer [run-jetty]]
并在Intellij中调试该文件作为Clojure申请。